如何在ggplot中实现绝对百分比比例?
Posted
技术标签:
【中文标题】如何在ggplot中实现绝对百分比比例?【英文标题】:How to achieve an absolute percentage scale in ggplot? 【发布时间】:2020-03-09 22:54:16 【问题描述】:我正在尝试使用 gpplot 在堆叠图中绘制正数和负数。根据我在此页面上找到的示例,这可以正常工作。
我的图表的限制是 -1 和 1,但我希望刻度以绝对百分比的形式显示标签,即从左侧的 100% 到中间的 0% 到右侧的 100%。
以下最小示例说明我可以获得百分比刻度标签 (labels = percent
) 或绝对刻度 (labels = abs
),但我不知道如何组合它们。
提前致谢。
library(tidyverse)
library(scales)
x <- tribble(
~response, ~count,
"a", -0.2,
"b", -0.1,
"c", 0.5,
"d", 0.2
)
p <- ggplot() +
geom_bar(data = x,
aes(x = "", y = count, fill = response),
position = "stack",
stat = "identity") +
coord_flip()
# Percent scale
p + scale_y_continuous(labels = percent, limits = c(-1, 1), expand = c(0.05, 0))
# Absolute scale
p + scale_y_continuous(labels = abs, limits = c(-1, 1), expand = c(0.05, 0))
由reprex package (v0.3.0) 于 2019 年 11 月 14 日创建
【问题讨论】:
用labels = function(x) percent(abs(x))
之类的东西替换labels = percent
能实现您的目标吗?
这实际上非常有效。非常感谢。比我想象的要容易得多。
【参考方案1】:
答案在 cmets 中:在 scale_y_continuous()
中使用 labels = function(x) percent(abs(x))
。
【讨论】:
【参考方案2】:位置从堆叠更改为闪避。这导致在显示不同计数值的同时将变量清晰地分开为零。
p <- ggplot() +
geom_bar(data = x %>% filter(count < 0),
aes(x = "", y = count, fill = response),
position = "dodge",
stat = "identity") +
geom_bar(data = x %>% filter(count >= 0),
aes(x = "", y = count, fill = response),
position = "dodge", stat = "identity") +
coord_flip()
# Percent scale
p + scale_y_continuous(labels = percent, limits = c(-1, 1), expand = c(0.05, 0))
# Absolute scale
p + scale_y_continuous(labels = abs, limits = c(-1, 1), expand = c(0.05, 0))
输出显示在下面的某处。
很棒的绘图示例。谢谢,
【讨论】:
谢谢,@Gray。不过,我并不想以任何方式改变酒吧。我只想更改秤的标签。我进一步简化了示例,因为我注意到最小示例不需要两条单独的 geom_bar 行。以上是关于如何在ggplot中实现绝对百分比比例?的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签
R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例(对计算获得的百分比进行近似,值保留整数部分)使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签