ggplot2 stat_sum: 用百分比标记数据点

3
我想问一下是否可以在stat_sum绘制的每个点上标记该点所代表的观测值的百分比(即比例)。最好能以百分数格式而不是小数格式显示标签。谢谢您的时间。 编辑:最小可重现示例
library("ggplot2")
library("scales")

ggplot(diamonds, aes(x = cut, y = clarity)) +
  stat_sum(aes(group = 1)) +
  scale_size_continuous(labels=percent)

生成的图像

我的问题是,如何(如果可能的话)用它们的“prop”百分比值标记每个摘要点。


也许您可以提供一些(可重现的)示例代码? - ROLO
抱歉,我不能分享我正在使用的数据,但我生成的图表与文档中的完全相同:http://docs.ggplot2.org/current/stat_sum.html。第二个示例图表示我的情况。我希望能够用它们的比例值标记每个摘要点,最好是以百分比格式。希望这有助于阐述。 - Harry
1
@Harry,你的问题已经16个小时没有得到回答了。这可能是因为你没有提供一个最小可重现的示例。我建议你创建一些虚假数据(一个小集合)和必要的支持代码,然后将它们添加到你的问题中。作为另一个新手,相信我,这会提高你获得答案的机会。请参考这个链接:https://dev59.com/eG025IYBdhLWcg3whGSx - SlowLearner
1
@SlowLearner 谢谢你的建议,我已经添加了一个使用 ggplot2 内置的 diamonds 数据集的示例。 - Harry
1个回答

10

有几个选项。假设由于点用百分比计数标记,因此不需要图例。

其中一种选择是添加另一个stat_sum()函数,其中包含标签美学和"text"几何对象。例如:

library("ggplot2")

ggplot(diamonds, aes(x = cut, y = clarity, group = 1)) +
  stat_sum(geom = "point", show.legend = FALSE) +
  stat_sum(aes(label = paste(round(..prop.. * 100, 2), "%", sep = "")), 
              size = 3, hjust = -0.4, geom = "text", show.legend = FALSE)

或者,也许没有必要使用点来表示位置和大小。标签可以完成所有工作:

ggplot(diamonds, aes(x = cut, y = clarity, group = 1)) +
   stat_sum(aes(label = paste(round(..prop.. * 100, 2), "%", sep = "")), 
              geom = "text", show.legend = FALSE) +
  scale_size(range=c(2, 8))
有时在ggplot外创建一个汇总表格会更容易:
library(plyr)
df = transform(ddply(diamonds, .(cut, clarity), "nrow"),
        percent = round(nrow/sum(nrow)*100, 2))

ggplot(df, aes(x = cut, y = clarity)) +
  geom_text(aes(size = percent, label = paste(percent, "%", sep = "")), 
                     show.legend = FALSE) +
  scale_size(range = c(2, 8))

在此输入图片描述


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