在ggplot2中的2d图上显示3个维度

时间:2014-11-08 21:58:28

标签: r ggplot2

我有三个列的这个csv:https://dl.dropboxusercontent.com/u/73950/moduVSmnc.csv

看起来像这样:

modu,apl,mnc
0.30,2.06,51.0
0.30,2.07,45.0
0.30,2.10,35.0
0.30,2.15,48.33
0.30,2.20,35.33
0.30,2.25,34.5
0.30,2.24,28.0
0.34,2.10,44.0
0.34,2.15,47.5
0.34,2.13,31.0
0.34,2.20,36.0
0.34,2.19,32.0
0.34,2.20,49.0
...

我想显示变量" modu'在x轴上," apl"在y轴上," mmc"作为一种颜色。

现在,我希望情节像一个正方形网格,就像这样(抱歉可怕的颜色......):

enter image description here

使用ggplot2在R中实现此目的的直接方法是什么? 使用以下代码:

library(ggplot2)
fileName = paste("/moduVSmnc.csv", sep = "")
mydata = read.csv(fileName,sep=",", header=TRUE)
ggplot(mydata)+geom_tile(aes(x=modu,y=apl,fill=mnc))

产生接近我需要的东西:

enter image description here

除此之外,我需要" modu"和" apl"落入垃圾箱,所以我有一个干净的网格,其中所有的瓷砖都是1)填充颜色和2)并排相互。

1 个答案:

答案 0 :(得分:3)

这样的东西?

df <- read.csv("https://dl.dropboxusercontent.com/u/73950/moduVSmnc.csv")
breaks <- seq(1.95,2.5,by=0.05)
gg <- aggregate(mnc~cut(apl,breaks=breaks)+modu,df,mean)
colnames(gg)<- c("apl","modu","mnc")
gg$modu <- as.factor(gg$modu)
library(ggplot2)
library(RColorBrewer)
ggplot(gg) + 
  geom_tile(aes(x=modu,y=apl,fill=mnc))+
  scale_fill_gradientn(colours=rev(brewer.pal(10,"Spectral")))+
  coord_fixed()

因此,如您所说,这会将apl变量放入bin中,然后计算每个bin的平均值mncmodu值已经被分箱。我们需要将两个(已分箱的)aplmodu转换为因子,并将coord_fixed(...)设置为方形切片。

请注意,有些垃圾箱是空的......

编辑:回应OP的评论。

cut(...)函数生成的标签默认显示每个bin中的范围。您可以使用labels=...参数更改此设置,如下所示。

df <- read.csv("https://dl.dropboxusercontent.com/u/73950/moduVSmnc.csv")
breaks <- seq(1.95,2.5,by=0.05)
gg <- aggregate(mnc~cut(apl,breaks=breaks,
                        labels=format(breaks[-1],nsmall=2))+modu,
                df,mean)
colnames(gg)<- c("apl","modu","mnc")
gg$modu <- as.factor(gg$modu)
library(ggplot2)
library(RColorBrewer)
ggplot(gg) + 
  geom_tile(aes(x=modu,y=apl,fill=mnc))+
  scale_fill_gradientn(colours=rev(brewer.pal(10,"Spectral")))+
  coord_fixed()