nik*_*.96 7 r ggplot2 geom-bar geom-text
我正在尝试生成带有数据标签的堆积柱形图。
我能够生成图表,但无法找到输入数据标签的方法。我已经尝试过,geom_text()
但它一直要求我输入 ay 标签(如果您看到 ggplot 代码不存在)。我也尝试过添加geom_text(stat = "count")
,但这也给了我一个错误
“错误:geom_text 需要以下缺失的美感:y 和标签”。
PS - 我知道我需要将 y 轴重命名为百分比。我也在想办法如何拥有更多对比色
ggplot(property,
aes(x=Bedrooms.New, fill=Property.Type.)) +
geom_bar(position = "fill") +
scale_x_discrete(name = "Number of Bedrooms",
limits = sort(factor(unique(property$Bedrooms.New))))
Run Code Online (Sandbox Code Playgroud)
我在下面添加了一张图片,看看我现在的输出是什么!
ste*_*fan 14
正如错误消息告诉您的那样,geom_text
需要label
aes。在您的情况下,您想用一个变量来标记条形,该变量不是数据集的一部分,而是由stat="count"
ie计算stat_count
。
可以通过 访问计算变量..NAME_OF_COMPUTED_VARIABLE..
。..count..
,例如获取用作变量名称的计数。顺便说一句:计算变量的列表可以在 stat 或 geom 的帮助包中找到,例如?stat_count
更新:点-点表示法在ggplot2 3.4.0
. 相反,我们可以或应该使用after_stat
,即使用egafter_stat(count)
代替..count..
使用mtcars
作为示例数据集,您可以geom_bar
像这样标记:
library(ggplot2)
ggplot(mtcars, aes(cyl, fill = factor(gear))) +
geom_bar(position = "fill") +
geom_text(aes(label = after_stat(count)),
stat = "count", position = "fill"
)
Run Code Online (Sandbox Code Playgroud)
还有两个注意事项:
为了使标签的位置正确,您必须将参数设置position
为与 中使用的参数相匹配geom_bar
,例如position="fill"
在您的情况下。
虽然计数非常简单,但用百分比标记是一个不同的问题。默认情况下按stat_count
组计算百分比,例如按通过 aes 设置的组fill
。这些可以通过访问after_stat(prop)
。如果您希望以不同的方式计算百分比,则必须手动执行。
举例来说,如果您希望每条柱的百分比总和为 100%,则可以使用after_stat
和ave
(计算每组的百分比)来实现,如下所示:
library(ggplot2)
ggplot(mtcars, aes(cyl, fill = factor(gear))) +
geom_bar(position = "fill") +
geom_text(aes(label = after_stat(count)),
stat = "count", position = "fill"
)
Run Code Online (Sandbox Code Playgroud)