R 使用ggplot2条形图中的scales软件包,组内而非组间的百分比相加?
我想使用条形图(ggplot2)比较自动和手动车辆(mtcars数据集) 我有一个在y轴上显示计数的图(下面的左图),但是我想要一个在y轴上显示百分比的图 我想要这个,这样我就可以更容易地比较汽车,比如说‘四缸汽车占自动汽车的x%,但只占手动汽车的y%’ 我已经尝试过使用这个R 使用ggplot2条形图中的scales软件包,组内而非组间的百分比相加?,r,ggplot2,data-science,bar-chart,data-visualization,R,Ggplot2,Data Science,Bar Chart,Data Visualization,我想使用条形图(ggplot2)比较自动和手动车辆(mtcars数据集) 我有一个在y轴上显示计数的图(下面的左图),但是我想要一个在y轴上显示百分比的图 我想要这个,这样我就可以更容易地比较汽车,比如说‘四缸汽车占自动汽车的x%,但只占手动汽车的y%’ 我已经尝试过使用这个scales软件包教程将计数更改为百分比(下面的右图) 自动车和手动车的百分比加起来的问题。我想把自动车和手动车的百分比加起来 使用scales软件包或其他软件包是否有办法做到这一点 谢谢 # Packages libra
scales
软件包教程将计数更改为百分比(下面的右图)
自动车和手动车的百分比加起来的问题。我想把自动车和手动车的百分比加起来
使用scales
软件包或其他软件包是否有办法做到这一点
谢谢
# Packages
library(ggplot2)
library(scales)
# Data
data(mtcars)
mtcars$cyl <- as.factor(mtcars$cyl)
mtcars$am <- as.factor(mtcars$am)
# Good counts plot
ggplot(data=mtcars, aes(x=am, fill=cyl)) +
geom_bar(stat="count", position=position_dodge()) + scale_fill_grey() +
ggtitle(expression(bold("mtcars"))) + xlab("automatic or manual") + ylab("count") +
theme(text=element_text(size=20)) +
theme(plot.title = element_text(size = 18, face = "bold"))
# Bad percentages plot
ggplot(data=mtcars, aes(x=am, fill=cyl)) +
geom_bar(aes(y=(..count..)/sum(..count..)), position=position_dodge()) + scale_fill_grey() +
ggtitle(expression(bold("mtcars"))) + xlab("automatic or manual") + ylab("percentage") +
theme(text=element_text(size=20)) +
theme(plot.title = element_text(size = 18, face = "bold"))
#包
图书馆(GG2)
图书馆(比例尺)
#资料
数据(mtcars)
mtcars$cyl我只知道手动计算每个am
的百分比(使用tidyverse):
库(tidyverse)
损益单位df%
选择(am,cyl)%>%#我们只对am和cyl感兴趣
分组依据(am,cyl)%>%#分组数据和
添加气缸数(%>%#添加气缸数(每am)
唯一()%>%#删除dupliceas
解组()%>%#删除分组
分组依据(am)%>%#分组依据am为。。。
变异(循环百分比=n/和(n))%>%#…计算百分比
变异(cyl=as.factor(cyl))%>%#更改为因子,以便ggplot处理。。。
将(am=as.factor(am))#…am和cyl作为离散变量
ggplot(数据=pl_df,aes(x=am,填充=cyl,y=cyl_百分比))+
几何图形栏(stat=“identity”,position=position\u dodge())+
比例\填充\灰色()+
ggtitle(粗体(“mtcars”))+
xlab(“自动或手动”)+
ylab(“百分比”)+
主题(文本=元素\文本(大小=20))+
主题(plot.title=element\u text(size=18,face=“bold”))
我只知道手动计算每个am
的百分比(使用tidyverse):
库(tidyverse)
损益单位df%
选择(am,cyl)%>%#我们只对am和cyl感兴趣
分组依据(am,cyl)%>%#分组数据和
添加气缸数(%>%#添加气缸数(每am)
唯一()%>%#删除dupliceas
解组()%>%#删除分组
分组依据(am)%>%#分组依据am为。。。
变异(循环百分比=n/和(n))%>%#…计算百分比
变异(cyl=as.factor(cyl))%>%#更改为因子,以便ggplot处理。。。
将(am=as.factor(am))#…am和cyl作为离散变量
ggplot(数据=pl_df,aes(x=am,填充=cyl,y=cyl_百分比))+
几何图形栏(stat=“identity”,position=position\u dodge())+
比例\填充\灰色()+
ggtitle(粗体(“mtcars”))+
xlab(“自动或手动”)+
ylab(“百分比”)+
主题(文本=元素\文本(大小=20))+
主题(plot.title=element\u text(size=18,face=“bold”))
如果您想在ggplot2
中完成整个过程(这并不总是最简单的方法),您可以执行以下操作:
ggplot(mtcars,aes(x=cyl,group=am,fill=cyl))+
几何图形条(aes(y=统计后(prop),填充=系数(统计后(x)))+
比例x离散(扩展=c(0.5,0.2))+
比例y连续(标签=比例::百分比)+
比例填充手动(值=c(“灰度25”、“灰度50”、“灰度75”),
标签=标高(mtcars$cyl))+
平面网格(.~am,switch=“x”)+
ggtitle(粗体(“mtcars”)+
实验室(x=“自动或手动”,y=“百分比”)+
主题(文本=元素\文本(大小=20),
plot.title=元素\文本(大小=18,face=“bold”),
axis.text.x=元素_blank(),
轴刻度长度x=单位(0,“点”),
面板间距=单位(0,“点”),
strip.placement=“外部”,
strip.background=元素_blank())
如果您想在ggplot2
中完成整个过程(这并不总是最简单的方法),您可以执行以下操作:
ggplot(mtcars,aes(x=cyl,group=am,fill=cyl))+
几何图形条(aes(y=统计后(prop),填充=系数(统计后(x)))+
比例x离散(扩展=c(0.5,0.2))+
比例y连续(标签=比例::百分比)+
比例填充手动(值=c(“灰度25”、“灰度50”、“灰度75”),
标签=标高(mtcars$cyl))+
平面网格(.~am,switch=“x”)+
ggtitle(粗体(“mtcars”)+
实验室(x=“自动或手动”,y=“百分比”)+
主题(文本=元素\文本(大小=20),
plot.title=元素\文本(大小=18,face=“bold”),
axis.text.x=元素_blank(),
轴刻度长度x=单位(0,“点”),
面板间距=单位(0,“点”),
strip.placement=“外部”,
strip.background=元素_blank())
我收到一条错误消息:“error:Columnam
无法修改,因为它是一个分组变量”奇怪-对我来说它可以工作(tidyverse 1.3.0版)。可能有帮助的是在变异(am=as.factor(am))
之前添加ungroup()%%>%
,我收到一条错误消息:“error:Columnam
无法修改,因为它是一个分组变量”奇怪-对我来说它可以工作(tidyverse版本1.3.0)。在变异(am=as.factor(am))
library(tidyverse)
pl_df <- mtcars %>%
select(am, cyl) %>% # we're only interested in am and cyl
group_by(am, cyl) %>% # group data and
add_count(cyl) %>% # add count of cylinders (per am)
unique() %>% # remove dupliceas
ungroup() %>% # remove grouping
group_by(am) %>% # group by am for...
mutate(cyl_percentage = n/sum(n)) %>% # ...calculating percentage
mutate(cyl = as.factor(cyl)) %>% # change to factors so that ggplot treats...
mutate(am = as.factor(am)) # ...am and cyl as discrete variables
ggplot(data = pl_df, aes(x = am, fill = cyl, y = cyl_percentage)) +
geom_bar(stat = "identity", position=position_dodge()) +
scale_fill_grey() +
ggtitle(expression(bold("mtcars"))) +
xlab("automatic or manual") +
ylab("percentage") +
theme(text=element_text(size=20)) +
theme(plot.title = element_text(size = 18, face = "bold"))