我有一个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被当作一个因子变量(5个级别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-删除瓷砖中间的白线。
谢谢!
发布于 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()或类似的内容,默认情况下移除网格线,背景颜色设置为白色。像这样的瓷砖地图效果很好。
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-24 13:39:39
瓷砖之间的空白:将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())https://stackoverflow.com/questions/68908371
复制相似问题