我正在绘制一个分类变量,而不是显示每个类别值的计数.
我正在寻找一种方法来ggplot显示该类别中的值的百分比.当然,有可能用计算的百分比创建另一个变量并绘制一个变量,但我必须做几十次,我希望在一个命令中实现它.
我正在尝试类似的东西
qplot(mydataf) +
stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
scale_y_continuous(formatter = "percent")
Run Code Online (Sandbox Code Playgroud)
但我必须错误地使用它,因为我有错误.
为了轻松重现设置,这里有一个简化的例子:
mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc");
mydataf <- factor(mydata);
qplot (mydataf); #this shows the count, I'm looking to see % displayed.
Run Code Online (Sandbox Code Playgroud)
在实际情况中,我可能会使用ggplot而不是qplot,但使用stat_bin的正确方法仍然无法使用.
我也试过这四种方法:
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
ggplot(mydataf, aes(x = levels(mydataf), y = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个刻面的条形图,每个方面的百分比加起来为100.这个问题的解决似乎是一个组合group和..density...然而 - 在我看来,这group与之相矛盾fill.
数据:
test <- data.frame(
test1 = sample(letters[1:2], 100, replace = TRUE),
test2 = sample(letters[3:8], 100, replace = TRUE)
)
Run Code Online (Sandbox Code Playgroud)
这使得百分比正确:
ggplot(test, aes(test2)) +
geom_bar(aes(y = ..density.., fill=test2,group=test1)) +
facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)
您可以看到的总线fill被覆盖:

但是,下面的代码尊重fill但给我错误的百分比(整个图表的总和为100)(使用..density ..):
ggplot(test, aes(test2)) +
geom_bar(aes(y = ..count../sum(..count..), fill=test2)) +
facet_grid(~test1)
Run Code Online (Sandbox Code Playgroud)

相关:我的这个老问题:在一个刻面的ggplot条形图中y实验室的百分比?.
是的 - 我可以创建其他数据,但我觉得这属于表示层.实际上这感觉就像一个bug?
我的问题类似于将 R ggplot中的直方图中的y轴标准化为比例, 但我想稍微添加一下.
一般来说,我在2x3小平面设计中有6个直方图,我想分别对它们进行标准化.我将尝试在此处创建一个示例数据集以提供一个想法:
hvalues=c(3,1,3,2,2,5,1,1,12,1,4,3)
season=c("fall","fall","fall","fall","winter","winter","winter","winter","summer","summer","summer","summer")
year=c("year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2","year 1","year 1","year 2","year 2")
group=c("fall year 1","fall year 1","fall year 2","fall year 2","winter year 1","winter year 1","winter year 2","winter year 2","summer year 1","summer year 1","summer year 2","summer year 2")
all=data.frame(hvalues,season,year)
Run Code Online (Sandbox Code Playgroud)
运用
ggplot(all, aes(x=hvalues,group=group)) +
geom_histogram(aes(y=..count../sum(..count..))) +
facet_grid(season ~ year)
Run Code Online (Sandbox Code Playgroud)
给出整体比例(即组合所有方面).我希望每个组的方面都被标准化为1.在我的实际数据中,hvalues不是整数 - 它们是数字的.
我是一个使用R的新手,非常感谢一些帮助.提前致谢!
我正在尝试使用facet_grid来生成几个图,其中每个图的百分比标签增加到100%.
在提供的图像中,百分比标签增加到49%(第一刻面)和51%(第二刻面).
我已经看到这个问题,解决方案是聚合ggplot之外的数据.我宁愿不这样做,我相信这是一个更好的方法.
library("ggplot2")
library("scales")
set.seed(123)
df <- data.frame(x = rnorm(10000, mean = 100, sd = 50))
df$factor_variable <- cut(df$x, right = TRUE,
breaks = c(0, 25, 50, 100, 200, 10000),
labels = c("0 - 25", "26 - 50", "51 - 100", "101 - 200", "> 200")
)
df$second_factor_variable <- ifelse(df$x < 100, 1, 2)
df <- sample(df, x > 0)
table(df$second_factor_variable)
p1 <- ggplot(df, aes(x = factor_variable, y = (..count..)/sum(..count..), ymax = 0.8))
p1 <- p1 + …Run Code Online (Sandbox Code Playgroud)