如何为 R 中使用百分比而不是计数作为 y 轴的数据框创建条形图?

Posted

技术标签:

【中文标题】如何为 R 中使用百分比而不是计数作为 y 轴的数据框创建条形图?【英文标题】:How do you create a bar graph for a data frame in R that uses percentages as the y-axis instead of a count? 【发布时间】:2015-03-24 01:32:51 【问题描述】:

如果我有这样的数据(但更大):

ID    Rating
12    Good
12    Good
16    Good
16    Bad
16    Very Bad
34    Very Good
38    Very Bad
52    Bad

我需要做什么才能使绘图显示每种类型的计数百分比。基本上,对于每种类型的评分,图表应该看起来像 x 轴上的 4 个条形图,y 轴应该是评分出现时间的百分比。例如,上面的数据框将有 4 个条形图,其中非常差和差为 25%,好为 37.5%,非常好为 12.5%。我真的更希望在 ggplot2 中得到答案,但是,因为我根本找不到这个,所以 R 中的任何东西都可以工作。

【问题讨论】:

【参考方案1】:

这是我找到的最佳答案:

# create data
data <- data.frame(ID = as.factor(c(12,12,16,16,16,34,38,52)),
               Rating = c("Good","Good","Good","Bad","Very Bad","Very Good","Very Bad","Bad"))

# get summary table of Rating
t <- table(data$Rating)
# get percentage list
percent <- as.vector(t)/nrow(data)

# plot
library(ggplot2)
ggplot(data = data,aes(x=Rating)) + 
    geom_bar(aes(y = (..count..)/sum(..count..))) +
    ylab("Percentage") +
    ylim(0,0.4)

【讨论】:

【参考方案2】:
library(ggplot2)

# create some data
DT <- data.frame(ID=1:10,Rating=sample(c("Very Good","Good","Bad","Very Bad"),20,replace=TRUE))

ggplot(DT, aes(factor(Rating))) + geom_bar()

参考:ggplot2 docs

【讨论】:

【参考方案3】:

用于以barplots 为基础显示比例,实际比例在条形上方显示为文本:

tmp.table <- prop.table(table(dat$Rating))
with(dat, barplot(tmp.table, xlab= "Rating", ylab="proportion", ylim=c(0,.40)))
text(x = c(0.75, 2, 3.1, 4.25), y = tmp.table + .01, labels=paste(tmp.table*100,"%"))

结果

数据

dat <- read.csv(text="Rating
Good
Good
Good
Bad
Very Bad
Very Good
Very Bad
Bad")

【讨论】:

以上是关于如何为 R 中使用百分比而不是计数作为 y 轴的数据框创建条形图?的主要内容,如果未能解决你的问题,请参考以下文章

固定y轴的比例/大小

如何为具有多个 y 轴的图表设置动画(python)

如何为红移中字符串的唯一计数百分比?

如何将计数总结为百分比而不是绝对值?

如何为空输入(而不是默认的+Inf和-Inf)指定R中Max,Min的自定义返回值?

matplotlib/pandas 中是不是有参数将直方图的 Y 轴作为百分比?