YAS*_*SEM 3 r ggplot2 geom-tile
我有一个具有以下结构的 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
Run Code Online (Sandbox Code Playgroud)
我想创建一个“类似热图”的图形,其中 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))
Run Code Online (Sandbox Code Playgroud)
然而,由于某种原因,我的图块在 x 轴上的图块之间(即每个因子水平之间)有很大的灰色空白空间。输出图像看起来像这样

另外,我在每个图块的中间都有这些细白线,
所以我想做的是:1-更改图块的大小和形状(希望它是正方形且比现在小)2-删除白色瓷砖中间的线。
谢谢你!
OP。我注意到您在对另一个答案的回复中稍微完善了您的问题。我建议您编辑原始问题以反映您想要做的一些事情,但这里是总结您想知道的内容的总体情况:
以下是如何依次解决每一个问题。
这已经在评论和@dy_by 的另一个答案中得到了回答。geom具有确定图块相对于坐标系tile有多大的属性,其中意味着图块彼此“接触”。这部分很重要,因为图块的大小与图块相对于坐标系的大小不同。如果设置,则图块的大小将设置为占据 x 和 y 中的一个离散值之间面积的 40%。这意味着,如果您有除 之外的任何值,那么图块之间将有“空间”。widthwidth=1width=0.4width=1
geomtile绘制一个方形图块,因此输出中图块不是方形的原因与 geom 无关 - 它与您的坐标系和在程序中绘制它的图形设备有关。默认情况下,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
Run Code Online (Sandbox Code Playgroud)
现在用不同的width=设置保存该图,以向您展示尺寸的变化。您不必指定height=,因为宽高比固定为 1。
ggsave("example_big.png", plot=p, width=12)
Run Code Online (Sandbox Code Playgroud)
ggsave("example_small.png", plot=p, width=3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2691 次 |
| 最近记录: |