首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何消除geom_tile中瓷砖之间的空白并更改瓷砖大小

如何消除geom_tile中瓷砖之间的空白并更改瓷砖大小
EN

Stack Overflow用户
提问于 2021-08-24 13:19:50
回答 2查看 951关注 0票数 1

我有一个df,其结构如下:

代码语言:javascript
复制
    id   col1  col2  col3
#1  A     1     3     3
#2  B     2     2     3
#3  C     1     2     3
#4  D     3     1     1

我想要创建一个“热图样”的图形,其中col1-col3被当作一个因子变量(5个级别1-5,不是全部显示在这里),并且根据它们的值,它们得到了不同的颜色。对于以下代码,我已经取得了相当大的进展:

代码语言:javascript
复制
df <- melt(df, id.vars="id")
p <- ggplot(df, aes(x=variable, y=id, label=value, fill=as.factor(value))) + 
  geom_tile(colour="white", alpha=0.2, aes(width=0.4)) +
  scale_fill_manual(values=c("yellow", "orange", "red", "green", "grey")) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  labs(x = "Value", y="id") +
  scale_x_discrete(expand=c(0,0))+
  scale_y_discrete(expand=c(0,0))

但是,由于某种原因,我的瓷砖在x轴(即每个因子层之间)之间有很大的灰色空白处。输出图像如下所示

另外,我在每个瓷砖的中间都有这些薄薄的白线,

所以我想做的是: 1-改变瓷砖的大小和形状(希望它是一个正方形,比现在小),2-删除瓷砖中间的白线。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-24 14:42:48

操作。我注意到,在你对另一个答案的答复中,你对你的问题做了一点改进。我建议你编辑你的原始问题,以反映出你想要做的一些事情,但以下是你想要知道的事情的总图:

  • 如何去除瓷砖之间的灰色空间
  • 如何使瓷砖变得更小
  • 如何使瓷砖变得更正方形

下面是如何依次解决每个问题。

如何去除瓷砖之间的灰色空间

这已经在@dy_by的一个评论和另一个答复中得到了回答。tile geom有一个属性width,该属性决定瓷砖相对于坐标系的大小,其中width=1表示瓷砖之间的“接触”。这部分很重要,因为瓷砖的大小与相对于坐标系的瓷砖大小不同。如果您设置了width=0.4,那么瓷砖的大小将占x和y中一个离散值之间面积的40%。这意味着,如果您有除width=1以外的任何值,那么瓷砖之间就会有“空间”。

如何使瓷砖方

tile geom绘制一个正方形瓷砖,所以您的瓷砖在输出中不成正方形的原因与地理无关--它与您的坐标系和程序中绘制它的图形设备无关。默认情况下,ggplot2将以高宽比绘制您的坐标系,以与您的图形设备相匹配。更改设备视图(窗口)的大小,您的坐标系统(和tiles)的纵横比将发生变化。有一种简单的方法可以将其修正为“正方形”,即使用coord_fixed()。您可以设置任意高宽比,但默认情况下,它将被设置为1(平方)。

如何使瓷砖变小

同样,瓷砖的大小不受geom_tile()函数的控制.或者坐标系统。它由您在图形设备中设置的视口控制。请注意,坐标系统和地理将调整大小,但文本将保持不变。这意味着,如果你缩小一个视窗或窗口,你的瓷砖将变得更小,但文本的大小(相对来说)似乎更大。通过用不同的参数调用ggsave(),用您的绘图为width=设置不同的参数,来尝试这一点。

把它放在一起

因此,我建议如何更改代码以解决所有这些问题。注意,我还建议您将主题更改为theme_classic()或类似的内容,默认情况下移除网格线,背景颜色设置为白色。像这样的瓷砖地图效果很好。

代码语言:javascript
复制
p <- ggplot(df, aes(x=variable, y=id, label=value, fill=as.factor(value))) + 
  geom_tile(colour="white", alpha=0.2, width=1) +
  scale_fill_manual(values=c("yellow", "orange", "red", "green", "grey")) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  labs(x = "Value", y="id") +
  scale_x_discrete(expand=c(0,0))+
  scale_y_discrete(expand=c(0,0)) +
  coord_fixed() +
  theme_classic()
p

现在,使用不同的width=设置保存该绘图,以向您展示如何更改大小大小。您不必指定height=,因为高宽比固定在1。

代码语言:javascript
复制
ggsave("example_big.png", plot=p, width=12)

代码语言:javascript
复制
ggsave("example_small.png", plot=p, width=3)

票数 4
EN

Stack Overflow用户

发布于 2021-08-24 13:39:39

瓷砖之间的空白:将width=0.4更改为width=1或删除它。

瓷砖之间的白线:它们来自参数colour="white" -如果您愿意,请移除它。

瓷砖上的行是反向行,使用透明参数alpha=0.2 --将其更改为更高的值,或通过+ theme(panel.grid.major = element_blank())在末尾删除行。

摘要:

代码语言:javascript
复制
ggplot(df, aes(x=variable, y=id, label=value, fill=as.factor(value))) + 
  geom_tile(alpha=0.2) +
  scale_fill_manual(values=c("yellow", "orange", "red", "green", "grey")) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1)) +
  labs(x = "Value", y="id") +
  scale_x_discrete(expand=c(0,0))+
  scale_y_discrete(expand=c(0,0))+
  theme(panel.grid.major = element_blank())
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68908371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档