使用ggplot2作为热图的3D数据

时间:2015-09-26 23:58:11

标签: r ggplot2 heatmap

我有三个变量的数据集:

       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数据适合它?

谢谢!

1 个答案:

答案 0 :(得分:3)

我想你可能想要使用stat_summary2d。当您使用相等大小的磁贴的单个颜色值均匀分布数据时,geom_tile是有意义的。您有不规则间隔的数据,并不能覆盖您的整个空间:

ggplot(dat, aes(x = modu, y = eff, color = eff)) + geom_point()

enter image description here

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()

enter image description here

所以我们在这里指定了z = eff,它是传递给z函数的fun值,在这种情况下是mean

您也可以使用stat_summary_hex来获取六边形分箱而不是方形拼贴。由于您正在使用coord_equal,因此我将x和y范围设置为相同,以便分箱为正方形而不是矩形。