我有三个列的这个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"作为一种颜色。
现在,我希望情节像一个正方形网格,就像这样(抱歉可怕的颜色......):
使用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))
产生接近我需要的东西:
除此之外,我需要" modu"和" apl"落入垃圾箱,所以我有一个干净的网格,其中所有的瓷砖都是1)填充颜色和2)并排相互。
答案 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的平均值mnc
。 modu
值已经被分箱。我们需要将两个(已分箱的)apl
和modu
转换为因子,并将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()