2014-02-08 5 views
1

Я пытаюсь сделать levelplot (также обращаясь к контурным линиям) из пакета решетки. У меня возникло несколько проблем (описано ниже).R levelplot colorkey label и цветовой диапазон

MyData: https://www.dropbox.com/s/ht55g0qlkiou2x2/growth.matrix.stackoverflow.xlsx

require(lattice)  
require(latticeExtra) 
require(xlsx) 

#matrix to be plotted 
growth.matrix<-as.matrix(read.xlsx("C:/Users/eckmannm/Dropbox/growth.matrix.stackoverflow.xlsx",sheetName="p4.pct",colIndex=2:8,startRow=3,endRow=15,header=FALSE)) 

#column values 
TempRange<-as.numeric(c(0, 2, 4, 6, 8, 10, 12)) 
#row values 
MeanTemp<-as.numeric(c(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)) 
#x and y axis labels 
x.range<-as.numeric(c(6, 8, 10, 12, 14, 16, 18)) 

#color ramp 
col.l <- colorRampPalette(c('red', 'orange', 'yellow', 'green', 'cyan', 'blue')) 

colorplot<- 
    levelplot(
    growth.matrix, 
    row.values=(MeanTemp), 
    column.values=(TempRange), 
    col.regions=col.l, 
    at=seq(from=0,to=1.01,length=100), 
    lattice.options=list(key=list(cex=4)), 
    panel = panel.2dsmoother, 
    scales=list((x=list(labels=MeanTemp)), y=list(labels=TempRange)), 
    colorkey=list(at=as.numeric(factor(c(seq(from=0, to=1, by=.20)))), 
       labels=as.character(c("0", "20%", "40%", "60%", "80%", "100%")), 
       col=(col.l))) 

contourplot<- 
    contourplot(
    growth.matrix, 
    row.values=MeanTemp, 
    column.values=TempRange, 
    at=seq(from=0, to=1.01, by=.2), 
    panel=panel.2dsmoother, 
    label.style=("flat"), 
    lwd=2, 
    labels=(list(cex=1.5,labels=(c("0", "20%", "40%", "60%", "80%", "100%"))))) 

(final.plot= (colorplot + contourplot)) 

>> dput(head(growth.matrix)) 
structure(c(0.117236699239957, NA, 0.416693811074919, NA, 0.776134455117953, 
NA, NA, 0.263952225841477, NA, 0.582491856677524, NA, 0.855917480998914, 
NA, NA, 0.423344191096634, NA, 0.6792888165038, NA, NA, NA, NA, 
0.5164223669924, NA, 0.698561346362649, NA, NA, NA, NA, 0.534989142236699, 
NA, NA, NA, NA, NA, NA, 0.507193268186754, NA, NA, NA, NA, NA, 
NA), .Dim = 6:7, .Dimnames = list(NULL, c("X2", "X3", "X4", "X5", 
"X6", "X7", "X8"))) 

The plot I have been producing

1) Я действительно хотел бы, чтобы удалить вертикальную белую рамку на краю цветной области (между осью меток и графика).

2) Я хотел бы легенду иметь дискретные метки, с различными контрольными точками, чем цвет

3) По каким-то причинам метки контура линии нанесены от графика ???

Любая помощь была бы принята с благодарностью! Заранее спасибо.

+0

Я продолжаю получать ошибки с вашим кодом .... Можете ли вы опубликовать воспроизводимый пример? –

+0

@IShouldBuyABoat: код работает нормально, но вам нужно загрузить несколько пакетов, я обновил код – nico

ответ

9

Я бы очень хотел удалить вертикальную белую границу на краю цветной области (между метками оси и графиком).

Добавить xlim=c(6,18) в свой levelplot вызова


Я хотел бы легенду иметь отдельные метки с различными контрольными точками, чем цвет

От ?levelplot:

на: числовой вектор, определяющий, где цвета меняются. должен быть длиной 1 больше, чем вектор col.

Этикетки: символьный вектор для обозначения значений по значению или, более часто, список, описывающий характеристики меток. Этот список может включать метки компонентов, в, cex, col, rot, font, fontface и fontfamily.

Итак, по существу, вы можете установить colorkey как:

colorkey=list(at=seq(0, 1, 0.2), 
       labels=list(at=c(0, 0.3, 0.6, 0.9), 
          labels=c("none", "a bit", "a bit more", "a lot")) 

Обратите внимание, что нет необходимости использовать factor, as.numeric или as.character, так что я удалил их.


3) По некоторым причинам метки контура линии нанесены от графика ???

Всегда со страницы справки:

этикетка: Как правило, логический, указывающими контурные линии должны быть помечены, но другие возможности для более сложного управления существуют.Подробности описаны на странице справки для panel.levelplot, к которой этот аргумент передается без изменений. Эта страница помощи также документирует label.style аргумент, который влияет как метки визуализируются

И в ?panel.levelplot мы находим, что:

label.style: Управляет позиции этикеток и вращение . Значение «flat» приводит к тому, что этикетка будет располагаться там, где контур является самым плоским, и этикетка не поворачивается. Значение «align» заставляет метку рисоваться как можно дальше от границ, и метка поворачивается для выравнивания с контуром в этой точке. По умолчанию используется сочетание этих подходов, предпочитающих самое плоское место, если оно не слишком близко к границам.

Я думаю, что для ваших конкретных данных смешанное (по умолчанию) решение работает лучше всего. Самое простое - удалить параметр label.style из вызова contourplot.

Эта же страница руководства также помогает в стилизации этикеток.

Смежные вопросы