3

让我们从文档的示例中获取 ggplot2 小提琴图的数据集,

> ToothGrowth$dose <- as.factor(ToothGrowth$dose)
> head(ToothGrowth)
   len supp dose
1  4.2   VC  0.5
2 11.5   VC  0.5
3  7.3   VC  0.5
4  5.8   VC  0.5
5  6.4   VC  0.5
6 10.0   VC  0.5

如果我们绘制图表,

library(ggplot2)
# Basic violin plot
p <- ggplot(ToothGrowth, aes(x=dose, y=len)) + 
  geom_violin()
p
# Rotate the violin plot
p + coord_flip()
# Set trim argument to FALSE
ggplot(ToothGrowth, aes(x=dose, y=len)) + 
  geom_violin(trim=FALSE)

我们得到这张

如何显示峰值的数值,即 Y 轴上密度最高的点?

4

1 回答 1

2

你的意思是这样的吗?

ggplot(ToothGrowth, aes(x = as.factor(dose), y = len)) +
    geom_violin(trim = FALSE) +
    geom_text(
        data = ToothGrowth %>%
            group_by(dose) %>%
            summarise(len = mean(len)),
        aes(x = as.factor(dose), y = len, label = len))

在此处输入图像描述


更新

要打印 max(density) 的位置,您可以执行以下操作

ggplot(ToothGrowth, aes(x = as.factor(dose), y = len)) +
    geom_violin(trim = FALSE) +
    geom_text(
        data = ToothGrowth %>%
            group_by(dose) %>%
            nest() %>%
            transmute(dose, len = map_dbl(data, function(x) {
                dens <- density(x$len)
                dens$x[which.max(dens$y)] })),
        aes(x = as.factor(dose), y = len, label = sprintf("%4.3f", len)))

在此处输入图像描述

于 2018-07-27T03:44:28.660 回答