ggplot2中的geom_tile返回空白图
Posted
技术标签:
【中文标题】ggplot2中的geom_tile返回空白图【英文标题】:geom_tile in ggplot2 returning blank plot 【发布时间】:2020-09-30 12:19:18 【问题描述】:我正在尝试使用下面的代码绘制一个包含三列的数据集,但我得到一个空白图,只有轴上的名称,谁能告诉我我做错了什么?
#rm(list=ls())
library(data.table)
library(wesanderson)
library(ggplot2)
exa <- fread("sample.csv", sep = "," ,header = T, stringsAsFactors = FALSE)
pal <- wes_palette("Zissou1", 100, type = "continuous")
sp1<-ggplot(exa, aes(x=x, y=y, fill=z))+
geom_tile(show.legend = T)+
scale_fill_gradientn(colours = pal) +
scale_x_discrete(expand = c(0, 0)) +
scale_y_discrete(expand = c(0, 0))
sp1
数据:
exa <- structure(list(x = c(0.457744, 0.492325, 0.49948, 0.471712, 0.504126,
0.505528, 0.516318, 0.521419, 0.518354, 0.523001, 0.527301, 0.566585,
0.411753, 0.427226, 0.446747, 0.43778, 0.432248, 0.444912, 0.462414,
0.456952, 0.443462, 0.420683, 0.392057), y = c(25.69908, 25.65119,
25.8332, 23.88982, 22.41502, 22.27553, 23.05898, 24.20714, 25.23666,
25.35443, 25.78347, 27.20575, 20.94434, 21.62892, 22.61483, 22.49146,
23.38523, 24.46414, 25.8023, 26.63754, 27.40164, 27.45981, 27.97814
), z = c(29.75408, 29.02752, 28.43744, 27.98952, 27.62504, 27.32658,
27.04928, 26.77825, 26.53036, 26.28481, 26.04137, 25.80254, 28.5918,
27.81994, 27.44201, 27.15059, 26.83333, 26.54576, 26.31531, 26.12999,
25.88431, 25.65788, 25.47488)), class = "data.frame", row.names = c(NA,
-23L))
【问题讨论】:
ndichistan,我建议对您的问题进行编辑,即 (a) 消除以前不可见的rm(list=ls())
,它不可见,因为您的 markdown code-fence 错误,请不要包含“危险”的代码,很容易误运行...,并且 (b) 删除了指向您的数据的链接并将其替换为数据。如果它这么小,那么在这里使用它会容易得多,并且当链接过时(他们几乎总是这样做)时,这个问题将变得无法重现,并且对后续读者来说价值不高。谢谢!
我无法重现您的问题:虽然它们是 小,但我确实在画布上看到了稀疏的斑点。是不是您正在查看一个小的绘图窗口而看不到这些点?您的“真实”数据是否更大,因此由于其他原因而受到抑制?
也无法复制(虽然我没有尝试过你的调色板)。
@r2evans 非常感谢您对未来发布的编辑和建议。我没有看到斑点(可能是因为你建议的原因),不幸的是,我无法透露完整的数据。然而,它是一个 3cols*48rows 数据框。有没有办法让它更显眼?
是的,只有小瓷砖。你确定要瓷砖吗?他们需要均匀分布的数据,而您的数据看起来不像。你不能只用彩色点代替吗?
【参考方案1】:
好吧,就像其他人说的那样,这可能不是在图块中表示数据的首选方式,而是使用geom_point
。在这种情况下,以下是可行的方法:
ggplot(exa, aes(x,y,color=z)) +
geom_point(size=3) +
scale_color_gradientn(colors = pal)
如果您仍想使用图块,正如其他人所提到的,您看不到图块,因为它们太小了。您可以通过指定width=
和height=
将它们放大以查看。由于 x 轴和 y 轴的比例不同,如果您想要方形瓷砖,则不能指定相同的数字。为此,您可以使用一点数学来为您做到这一点。这是可行的:
w= 0.02 * (max(exa$x)-min(exa$x))
h= 0.02 * (max(exa$y)-min(exa$y))
ggplot(exa, aes(x,y,fill=z)) +
geom_tile(width=w, height=h) +
scale_fill_gradientn(colors = pal)
顺便说一句 - 由于绘图的纵横比,那里的图块仍然不是正方形。
【讨论】:
以上是关于ggplot2中的geom_tile返回空白图的主要内容,如果未能解决你的问题,请参考以下文章