使用ggplot制作抖动图,并为每个组添加平均线

3

我在最近的搜索中看到了一些回答我的问题的答案,但是它们都不适用于我。

我想要绘制一个 geom_jitter() 图形,并将其分成三组,为每个组添加平均线。到目前为止,我有以下代码。但是还不够好。

library(ggplot2)
data("iris")

iris.summary <- aggregate(. ~ Species, mean, data=iris)

ggplot(iris, aes(x=Species, y=Sepal.Width, shape=Species)) +  
   geom_jitter(width=0.2) + geom_hline(data=iris.summary, size=1, 
   col="red", aes(yintercept=Sepal.Width))

这是生成以下图形的代码: enter image description here

我该如何将红线设置到点的边缘?

谢谢您的帮助。

Rhenan Bartels

1个回答

12

您可以通过对geom_crossbar()进行一些小的编程技巧,像这样:

ggplot(iris, aes(x=Species, y=Sepal.Width, shape=Species)) +  
    geom_jitter(width=0.2) +
    geom_crossbar(data=iris.summary, aes(ymin = Sepal.Width, ymax = Sepal.Width),
                  size=1,col="red", width = .5)
你需要玩弄一下 width = ... ,才能将它调整到最合适的状态,但是这已经很接近了。 输入图像描述 虽然不是直接相关的,但我从stat_summary()中得到了很多的信息,我认为这也展示了数据更好的一面:
ggplot(iris, aes(x=Species, y=Sepal.Width, shape=Species)) +  
    geom_jitter(width=0.2) +
    stat_summary(fun.data = mean_cl_normal, geom = "crossbar",
                 width = .5, color = "red")

1
红线看起来相当粗,因为绘制了多条水平线。如果您真的只想绘制平均值,请使用 stat_summary 行替换为 stat_summary(fun.y= mean, fun.ymin=mean, fun.ymax=mean, geom="crossbar", width=0.5, color="red") - cbrnr
size = 1 参数让它们变粗的。 - Nate
不是 mean_cl_normal 函数绘制的三条线,尝试将它们变得非常细,你就会看到。 - cbrnr
只是为了确保,我指的是您的第二个建议,使用stat_summary,使用geom_crossbar的图形仅在平均值处绘制一条线(就像我建议的那样)。 - cbrnr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接