2

使用iris数据:

require(ggplot2)
    ggplot(iris, aes(Species, Sepal.Length)) +
    geom_violin(draw_quantiles = c(0.25, 0.5, 0.75))

我们得到: 在此处输入图像描述

如何保持均值的直线,但使用虚线代替其他两个分位数?

我在这里使用了@jan-glx 非常方便的功能来处理我自己的数据:Split violin plot with ggplot2,但老实说,我不理解这段代码中的所有内容。另外,根据此链接https://seaborn.pydata.org/generated/seaborn.violinplot.html ,它似乎在 python 中是自动的,但我只使用 R。

如果我计算这个:

ggplot(iris, aes(Species, Sepal.Length)) +
  geom_violin(draw_quantiles = c(0.25, 0.5, 0.75),
              linetype = "dashed")

我得到了 type 中的所有行dashed在此处输入图像描述

谢谢您的帮助

4

1 回答 1

2

我和你有同样的问题。这可能不是最优雅的方式,但我首先绘制了虚线,然后用 重新绘制了小提琴fill="transparent"

draw_quantiles您可以控制在为in指定的向量中绘制哪些四分位数geom_violin()。首先用虚线绘制 25% 和 75% 四分位数,而不是仅用 50% 四分位数和实线重新绘制小提琴。请注意,50% 四分位数代表中位数,而不是平均值。

这是代码:

ggplot(iris, aes(Species, Sepal.Length)) +
geom_violin(draw_quantiles = c(0.25, 0.75),
      linetype = "dashed") +
geom_violin(fill="transparent",draw_quantiles = 0.5)

要获得实际均值,您必须使用stat_summary(),但不是直线,而是得到一个点。

ggplot(iris, aes(Species, Sepal.Length)) +
geom_violin(draw_quantiles = c(0.25, 0.75),
  linetype = "dashed") +
geom_violin(fill="transparent",draw_quantiles = 0.5) +
stat_summary(fun.y=mean, geom="point", shape=20, size=7, color="red", fill="red")

在此处输入图像描述

于 2018-11-27T15:13:33.697 回答