gpt4 book ai didi

删除 geom_tile 中的空白并匹配 geom_vline&hline 位置

转载 作者:行者123 更新时间:2023-12-04 01:48:32 27 4
gpt4 key购买 nike

使用 geom_tile 函数时,我无法删除矩形之间的空白区域。

df <- data.frame(
x = c(seq(2,16,2),seq(17,39,2)),
y = c(rep(c(seq(8,26,2),seq(27,45,2)),each=20)),
z = c(1:400))

library(ggplot2)
ggplot(df, aes(x, y)) +
geom_tile(aes(fill = factor(z)), colour = "grey50")+
geom_vline(aes(xintercept=6),linetype="dashed",colour="red",size=1)+
geom_hline(aes(yintercept=24),linetype="dashed",colour="red",size=1)+
scale_x_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
scale_y_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
theme(legend.position = "none")

enter image description here

直到这里我才明白为什么会这样。为了继续前进,我可以将 x 和 y 转换为因子级别以删除空格!但是这次我丢失了 geom_vlinegeom_hline 行。这可能发生在转换后的 x 和 y 因子水平。

ggplot(df, aes(factor(x), factor(y))) +
geom_tile(aes(fill = factor(z)), colour = "grey50")+
geom_vline(aes(xintercept=6),linetype="dashed",colour="red",size=1)+
geom_hline(aes(yintercept=24),linetype="dashed",colour="red",size=1)+
#scale_x_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
#scale_y_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
theme(legend.position = "none")

enter image description here

当我将因子级别添加到 geom_vline&geom_hline 时出现此错误!

Error in UseMethod("rescale") : no applicable method for 'rescale' applied to an object of class "factor"

  ggplot(df, aes(factor(x), factor(y))) +
geom_tile(aes(fill = factor(z)), colour = "grey50")+
geom_vline(aes(xintercept=factor(6)),linetype="dashed",colour="red",size=1)+ geom_hline(aes(yintercept=factor(24)),linetype="dashed",colour="red",size=1)+
#scale_x_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
#scale_y_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
theme(legend.position = "none")

最佳答案

这里有两种可能的解决方案。第一个是调整 tile 的 widthheight:

library(ggplot2)
ggplot(df, aes(x, y)) +
geom_tile(aes(fill = factor(z)), colour = "grey50", width = 2, height = 2)+
geom_vline(aes(xintercept=6),linetype="dashed",colour="red",size=1)+
geom_hline(aes(yintercept=24),linetype="dashed",colour="red",size=1)+
scale_x_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
scale_y_continuous(expand = c(0, 0),breaks=seq(0,50,1))+
theme(legend.position = "none")

enter image description here

第二个是改变xinterceptyintercept的值:

ggplot(df, aes(factor(x), factor(y))) +
geom_tile(aes(fill = factor(z)), colour = "grey50")+
geom_vline(aes(xintercept=3),linetype="dashed",colour="red",size=1)+
geom_hline(aes(yintercept=9),linetype="dashed",colour="red",size=1)+
theme(legend.position = "none")

enter image description here

来自

match(6, unique(df$x))
# [1] 3
match(24, unique(df$y))
# [1] 9

也就是说,现在我们需要指定感兴趣的因子水平的数量。在这种情况下,6 和 24 都用作因子水平,因此我们可以这样做,但通常这种方法可能行不通,因为您可能想要一条不存在的因子水平的线。

关于删除 geom_tile 中的空白并匹配 geom_vline&hline 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54352183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com