使用 geom_text 为条形图创建数据标签

using geom_text to create data labels for bar chart

提问人:Kiki Liu 提问时间:8/4/2023 最后编辑:stefanKiki Liu 更新时间:8/4/2023 访问量:22

问:

我正在使用 ggplot 2 中的“钻石”数据集进行练习。我正在尝试制作条形图,以演示每个颜色类别的平均价格:

这是我写的代码:

ggplot(data=diamonds)+
  geom_bar(mapping=aes(x=color,y=price),
           fun="mean",stat="summary",fill="yellow")+
  geom_text(
    aes(label=scales::comma(
      round(mean(price),digits=3)
      ),
        x=color,y=price),
    stat="summary",size=3,
    vjust=-1)

此代码生成的可视化效果如下所示: 我遇到的问题与数据标签有关: enter image description here

  1. 每个条形中的数据标签是相同的。这显然是不正确的;
  2. 为什么我的函数“digitals=3”不起作用?为什么无法更改数据标签中显示的位数?

我在网上搜索了可能的答案,但找不到一个好的解决方案

r ggplot2 标签 数字 geom-text

评论


答:

1赞 stefan 8/4/2023 #1

第一个问题是,使用 u 计算 的总体平均值。要获得计算的平均值,您必须使用 。这是一个变量,它包含引擎盖下计算的值。此值会自动映射到美学上。但是,要将其用于 我们必须包装以访问计算值。mean(price)pricecolorstat_summarylabel = after_stat(y)ystat_summaryylabelafter_stat

其次,问题在于您包装在其中将使用默认值再次舍入已经 ed 的值。为了解决这个问题,我建议使用 的参数,例如将其设置为四舍五入到小数点后三位。roundscales::commaroundaccuracy=1accuracyscales::comma.001

library(ggplot2)

ggplot(data = diamonds, aes(x = color, y = price)) +
  geom_bar(
    fun = "mean", stat = "summary", fill = "yellow"
  ) +
  geom_text(
    aes(
      label = after_stat(scales::comma(y, accuracy = .001))
    ),
    fun = "mean", 
    stat = "summary", 
    size = 3,
    vjust = -1
  )