如何删除 geom_tile 中图块之间的空白区域并更改图块大小
How to remove empty spaces between tiles in geom_tile and change tile size
我有一个结构如下的 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- 删除图块中间的白线。
谢谢!
图块之间的间隙:将 width=0.4
更改为 width=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())
OP。我注意到,在您对另一个答案的回应中,您对问题进行了一些提炼。我建议您编辑您的原始问题以反映您想要做的一些事情,但这里是总结您想知道的内容的总体情况:
- 如何去除图块之间的灰色space
- 如何让方块变小
- 如何让瓷砖更方正
以下是依次解决每个问题的方法。
如何去除图块之间的灰色 space
这已经在评论和@dy_by 的另一个回答中得到了回答。 tile
geom 具有 width
属性,它决定了相对于坐标系 的图块有多大 ,其中 width=1
表示图块“接触”另一个。这部分很重要,因为瓦片的大小不同于瓦片相对于坐标系的大小。如果设置 width=0.4
,则图块的大小将设置为占据 x 和 y 中一个离散值之间区域的 40%。这意味着,如果您有除 width=1
以外的任何值,那么您将在方块之间有“space”。
如何让方块变成正方形
tile
geom 绘制的是方形图块,因此输出中的图块不是正方形的原因与 geom 无关 - 它与坐标系和图形设备绘图有关它在你的程序中。默认情况下,ggplot2
将以与图形设备相匹配的宽高比绘制坐标系。更改设备视口的大小(window),坐标系(和图块)的纵横比也会发生变化。有一种简单的方法可以将其固定为“正方形”,即使用 coord_fixed()
。您可以设置任何您想要的纵横比,但默认情况下,它将设置为 1(正方形)。
如何让方块变小
同样,您的图块大小不受 geom_tile()
函数...或坐标系控制。它由您在图形设备中设置的视口控制。请注意,坐标系和几何图形将调整大小,但文本将保持不变。这意味着,如果您缩小视口或 window,您的图块会变小,但文本的大小(相对而言)会显得更大。通过调用 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)
我有一个结构如下的 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- 删除图块中间的白线。
谢谢!
图块之间的间隙:将 width=0.4
更改为 width=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())
OP。我注意到,在您对另一个答案的回应中,您对问题进行了一些提炼。我建议您编辑您的原始问题以反映您想要做的一些事情,但这里是总结您想知道的内容的总体情况:
- 如何去除图块之间的灰色space
- 如何让方块变小
- 如何让瓷砖更方正
以下是依次解决每个问题的方法。
如何去除图块之间的灰色 space
这已经在评论和@dy_by 的另一个回答中得到了回答。 tile
geom 具有 width
属性,它决定了相对于坐标系 的图块有多大 ,其中 width=1
表示图块“接触”另一个。这部分很重要,因为瓦片的大小不同于瓦片相对于坐标系的大小。如果设置 width=0.4
,则图块的大小将设置为占据 x 和 y 中一个离散值之间区域的 40%。这意味着,如果您有除 width=1
以外的任何值,那么您将在方块之间有“space”。
如何让方块变成正方形
tile
geom 绘制的是方形图块,因此输出中的图块不是正方形的原因与 geom 无关 - 它与坐标系和图形设备绘图有关它在你的程序中。默认情况下,ggplot2
将以与图形设备相匹配的宽高比绘制坐标系。更改设备视口的大小(window),坐标系(和图块)的纵横比也会发生变化。有一种简单的方法可以将其固定为“正方形”,即使用 coord_fixed()
。您可以设置任何您想要的纵横比,但默认情况下,它将设置为 1(正方形)。
如何让方块变小
同样,您的图块大小不受 geom_tile()
函数...或坐标系控制。它由您在图形设备中设置的视口控制。请注意,坐标系和几何图形将调整大小,但文本将保持不变。这意味着,如果您缩小视口或 window,您的图块会变小,但文本的大小(相对而言)会显得更大。通过调用 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)