在geom_tile中将NA值显示为透明

时间:2015-03-13 17:43:57

标签: r ggplot2 correlation

我正在制作一个geom_tile情节。

这是我的数据:

> cormatU.m
     X1 X2              value
1  PJan  3                 NA
2  PFeb  3                 NA
3  PMar  3                 NA
4  PApr  3 -0.161992302630029
5  PMay  3 -0.309114094976858
6   Jun  3 -0.336074090127203
7   Jul  3 -0.299397509057833
8   Aug  3 -0.238448926298331
9   Sep  3                 NA
10  Oct  3 -0.251843163432571
11  Nov  3  -0.27385055414082
12  Dec  3 -0.224421430174352
13  Jan  3   -0.3394060217504
14  Feb  3 -0.178520333980496
15  Mar  3 -0.245158851599677
16  Apr  3 -0.242129657088556
17  May  3 -0.172928147572245
18 PJan  4                 NA
19 PFeb  4 -0.225077539575345
20 PMar  4 -0.359309582752073
21 PApr  4                 NA
22 PMay  4 -0.189923565448835
23  Jun  4                 NA
24  Jul  4                 NA
25  Aug  4 -0.271119542271446
26  Sep  4                 NA
27  Oct  4 -0.204322223119054
28  Nov  4 -0.162222155770841
29  Dec  4 -0.289280496162877
30  Jan  4   -0.1760601312005
31  Feb  4                 NA
32  Mar  4                 NA
33  Apr  4 -0.261118372110555
34  May  4 -0.219750293141206
cormatU.m$X1<- factor(cormatU.m$X1, levels=c("PJan", "PFeb", "PMar", "PApr",     "PMay", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", "Jan", "Feb", "Mar", "Apr", "May"))
cormatU.m$X2 <- factor(cormatU.m$X2, levels=c("3", "4")

我的数据框中存在的NA存在问题。我已经查看了na.value设置为透明的其他选项,并且还尝试将scale_fill设置为离散,渐变和渐变2。但是,每次运行代码时都会给我一个错误

错误:提供给连续刻度的离散值。

以下是我尝试制作geom_tile图时使用的代码。这是显示相关系数的图。 NA值表示不重要的相关系数。任何处理NA值的建议都非常感谢。谢谢。

Ucor<- ggplot(cormatU.m, aes(X1,X2, fill=value))+
  geom_tile()+
  scale_x_discrete(expand=c(0,0), breaks=c("PJan", "PMar", "PMay", "Jul",     "Sep", "Nov", "Jan", "Mar", "May"))+ #only display those lables on x axis
  scale_y_discrete(expand=c(0,0))+  
  scale_fill_gradient(limits=c(-0.75,0.75), breaks=seq(-0.75,0.75,0.25),     low="green", high="red", na.value="transparent")+

1 个答案:

答案 0 :(得分:0)

value中的cormatU.m似乎不是数字。要解决这个问题,你可以这样做:

cormatU.m <- transform(cormatU.m, value=as.numeric(as.character(value)))

为什么as.character()?请注意,如果没有它as.numeric(),则值将不正确。这是因为R如何处理因子变量。首先转换为字符然后转换为数字将确保读取的值与数据框中的显示方式完全相同。