如何用ggplot实现同组Y轴点与X轴点连线且不连接Y轴点
解决ggplot中同组点与X轴对应位置连线的问题
嘿,刚接触R和ggplot的话遇到这种连线问题太正常啦!我来帮你捋清楚~
你现在遇到的问题是:用geom_line()的时候,它把同一个Island组内的点互相连起来了,但你想要的是每个点和X轴上对应的位置(也就是同x值、y=0的位置)用线条连接,对吧?
问题根源
geom_line()的默认逻辑是连接同一分组内的所有观测点,会按照x轴的顺序把这些点依次连成折线。所以当同一个Island下有多个不同的Letter_coding时,它就会把这些点串起来,这显然不是你想要的效果。
解决方案:用geom_segment()画垂线
要实现每个点到X轴对应位置的连线,我们可以用geom_segment(),它能指定线段的起点和终点。具体来说,每个线段的起点是你的数据点(x=Letter_coding, y=Lectin_C),终点是X轴上的对应位置(x=Letter_coding, y=0)。
基础版代码
ggplot(data = data, aes(x = Letter_coding, y = Lectin_C, color = Island)) + # 绘制从点到X轴的垂线,这里用灰色统一颜色,也可以和点同色 geom_segment(aes(xend = Letter_coding, yend = 0), color = "gray50", linewidth = 0.8) + # 保留原来的点 geom_point(size = 3) + # 可选:换个清爽的主题 theme_minimal()
同色版代码(垂线和点颜色一致)
如果想让垂线和对应点的颜色相同,把color放到全局的aes()里就行:
ggplot(data = data, aes(x = Letter_coding, y = Lectin_C, color = Island)) + geom_segment(aes(xend = Letter_coding, yend = 0), linewidth = 0.8) + geom_point(size = 3) + theme_minimal()
用你的示例数据测试
假设你的示例数据整理后是这样的:
# 示例数据 data <- tibble::tribble( ~Organism, ~Letter_coding, ~Island, ~Lectin_C, "Coral (Pocillopora)", "A", "FlintMos3_2", 77.42858683, "Coral (Pocillopora)", "B", "FlintMos3_2", 65.12345, "Coral (Pocillopora)", "A", "OtherIsland", 82.98765 )
运行上面的代码,就能得到每个点垂直连到X轴对应位置的图,不会再出现点之间互相连接的情况啦!
内容的提问来源于stack exchange,提问作者AAbVud
相关产品推荐
相关产品推荐

