1

我有一个具有以下结构的df:

    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 被视为因子变量(有五个级别 1-5,此处未全部显示),并且根据它们的值,它们会收到不同的颜色。我对以下代码的了解相对较远:

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-去除白色瓷砖中间的线。

谢谢!

4

2 回答 2

2

操作。我注意到在您对另一个答案的回答中,您已经稍微完善了您的问题。我建议您编辑原始问题以反映您想要做的一些事情,但这里是总结您想知道的整体情况:

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

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

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

这已经在评论和@dy_by 的另一个答案中得到了回答。tilegeom 具有确定图块相对于坐标系width有多大的属性,这意味着图块彼此“接触”。这部分很重要,因为瓦片的大小不同于瓦片相对于坐标系的大小。如果设置,则图块的大小将设置为占据 x 和 y 中一个离散值之间区域的 40%。这意味着,如果您有除 以外的任何值,那么您将在图块之间有“空间”。width=1width=0.4width=1

如何使瓷砖正方形

geom 绘制一个方形图块,因此输出中的图块不是正方形的原因与tilegeom 无关 - 它与您的坐标系和在程序中绘制它的图形设备有关。默认情况下,ggplot2将以纵横比绘制坐标系以匹配图形设备的纵横比。改变设备视口(窗口)的大小,你的坐标系(和瓦片)的纵横比就会改变。有一种简单的方法可以将其修复为“方形”,即使用coord_fixed(). 您可以设置任何所需的纵横比,但默认情况下,它将设置为 1(正方形)。

如何让瓷砖变小

同样,您的瓷砖的大小不受geom_tile()功能控制......或坐标系。它由您在图形设备中设置的视口控制。请注意,坐标系和几何图形将调整大小,但文本将保持不变。这意味着如果您缩小视口或窗口,您的图块会变小,但文本的大小(相对而言)会显得更大。ggsave()用不同的参数调用width=你的情节来试试这个。

把它放在一起

因此,这是我关于如何更改代码以解决所有这些问题的建议。注意我还建议您将主题更改为theme_classic()或类似的东西,默认情况下会删除网格线并将背景颜色设置为白色。它适用于这样的平铺地图。

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。

ggsave("example_big.png", plot=p, width=12)

在此处输入图像描述

ggsave("example_small.png", plot=p, width=3)

在此处输入图像描述

于 2021-08-24T14:42:48.730 回答
1

瓷砖之间的间隙:更改width=0.4width=1删除它。

瓷砖之间的白线:它们来自参数colour="white"- 如果需要,请将其删除

瓷砖上的线条是背景线,可以使用透明度参数- 将其更改为更高的值或在最后alpha=0.2删除线条+ theme(panel.grid.major = element_blank())

概括:

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())
于 2021-08-24T13:39:39.157 回答