我有三个变量的数据集:
modu mnc eff
1 0.3181054 0.02 0.4721769
2 0.3208097 0.06 0.4715646
3 0.3034289 0.06 0.4718367
4 0.3040065 0.06 0.4721088
5 0.3090475 0.02 0.4735374
6 0.2918505 0.02 0.4742177
(完整数据集:https://www.dropbox.com/s/vmsq5opdjq949ie/new_pareto.csv?dl=0)
我想在2d图上用ggplot2绘图,其中x = modu,y = eff,color = mnc。
我开始这个,但我显然做错了什么......
library(ggplot2)
dat <- read.csv("/new_pareto.csv", check.names = FALSE)
p <- ggplot(dat,aes(x = modu, y = eff, fill = mnc))
p <- p + geom_tile()
p <- p + scale_fill_gradientn(colours = myPalette(100))
p <- p + scale_x_discrete(expand = c(0, 1))
p <- p + scale_y_discrete(expand = c(0, 1))
p <- p + coord_equal()
p <- p + theme_bw()
print(zp1)
关于如何去做的任何想法?我是否需要以某种方式设置网格并让我的x和y数据适合它?
谢谢!
答案 0 :(得分:3)
我想你可能想要使用stat_summary2d
。当您使用相等大小的磁贴的单个颜色值均匀分布数据时,geom_tile
是有意义的。您有不规则间隔的数据,并不能覆盖您的整个空间:
ggplot(dat, aes(x = modu, y = eff, color = eff)) + geom_point()
和stat_summary2d
可让您将其分成正方形,并为落在其中的点指定汇总函数:
p <- ggplot(dat,aes(x = modu, y = eff))
p <- p + stat_summary2d(aes(z = mnc), fun = mean) +
scale_x_continuous(limits = c(0.27, 0.39)) +
scale_y_continuous(limits = c(0.42, 0.54))
p + coord_equal() + theme_bw()
所以我们在这里指定了z = eff
,它是传递给z
函数的fun
值,在这种情况下是mean
。
您也可以使用stat_summary_hex
来获取六边形分箱而不是方形拼贴。由于您正在使用coord_equal
,因此我将x和y范围设置为相同,以便分箱为正方形而不是矩形。