2014-12-02 2 views
0

Я использую levelplot() в R для создания цветного изображения матрицы (36 X 32). Матрица содержит много значений NaN в ней. Когда я пытаюсь генерировать levelplot используя следующие командыКак решить проблему с пустым levelplot() в R?

range = c(815.4, 816.2) 
matpalette <- colorRampPalette(c("blue", "black", "red"))(100) 
levelplot(t(m1),scales = list(draw = FALSE), col.regions = matpalette, xlab = "", ylab = "", at = seq(min(m1), max(m1), length = 100), main=main) 

Я получаю следующее сообщение об ошибке:

Error in seq.default(min(m1), max(m1), length = 100) : 'from' cannot be NA, NaN or infinite 

понимается Эта ошибка. Вместо использования мин (m1) и макс (m1) в levelplot(), когда я попробовать использовать следующее:

levelplot(m1,scales = list(draw = FALSE), col.regions = matpalette, xlab = "", ylab = "", at = seq(range[1], range[2], length = 100), main=main) 

я получаю пустой участок, только с Colorbar и диапазона, заданного в качестве значений клеща ,

enter image description here

Что мне нужно, это график значений в матрице и тем же Colorbar и значения идентичны клеща, как и в levelplot условии. Может ли кто-нибудь помочь мне в этом?

# Вариант 2

s <- seq(from=range[1], to=range[2], by=0.1) 

levelplot(t(m1), scales=list(tick.number=0), xlab=" ", ylab=" ", colorkey = list(at=s, labels=as.character(s)),col.regions = two.colors(n=256, start='blue', end='red', middle='black'), main=main) 

Colorbar, которую я получаю, как этот

enter image description here

Примечание: Диапазон используется отличается

+2

Очевидно вашу матрицу '' m1' имеет значения NA'. Возможно, вы должны использовать 'min (m1, na.rm = TRUE)' и 'max (m1, na.rm = TRUE)'. – shadow

+0

Также: Вы уверены, что 'm2' имеет любые значения между 815.4 и 816.2? Потому что это объясняет проблему ... – shadow

+0

Да, это проблема. Я попробовал ваше предложение, и это сработало, но теперь на отметках цветной панели я получаю значения диапазона, который находится в наборе данных. Первоначально я использовал # variant2 (команды, вставленные в вопрос) для генерации графика решетки. Но в этом случае я получаю изображение, но не получаю гладкую цветную панель. – novicegeek

ответ

0

Как это ??

test <- read.csv("test.csv") 
library(lattice) 
library(colorRamps) # for colorRampPalette 
matpalette <- colorRampPalette(c("blue", "black", "red"))(100) 
levelplot(as.matrix(test[,-1]),col.regions=matpalette) 

Вот более или менее то же самое, используя ggplot

library(ggplot2) 
library(reshape2) # for melt(...) 
library(grid)  # for unit(...) 
gg <- melt(test,id="X") 
ggplot(gg,aes(x=X,y=variable,fill=value))+ 
    geom_tile()+ 
    scale_fill_gradientn(name="",colours=matpalette,na.value="white")+ 
    scale_x_continuous(expand=c(0,0))+ 
    scale_y_discrete(expand=c(0,0))+ 
    coord_fixed()+ theme_bw()+ 
    theme(legend.key.height=unit(.15,"npc"))