Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用ggplot2条形图中的scales软件包,组内而非组间的百分比相加?_R_Ggplot2_Data Science_Bar Chart_Data Visualization - Fatal编程技术网

R 使用ggplot2条形图中的scales软件包,组内而非组间的百分比相加?

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

我想使用条形图(ggplot2)比较自动和手动车辆(mtcars数据集)

我有一个在y轴上显示计数的图(下面的左图),但是我想要一个在y轴上显示百分比的图

我想要这个,这样我就可以更容易地比较汽车,比如说‘四缸汽车占自动汽车的x%,但只占手动汽车的y%’

我已经尝试过使用这个
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:Column
am
无法修改,因为它是一个分组变量”奇怪-对我来说它可以工作(tidyverse 1.3.0版)。可能有帮助的是在
变异(am=as.factor(am))
之前添加
ungroup()%%>%
,我收到一条错误消息:“error:Column
am
无法修改,因为它是一个分组变量”奇怪-对我来说它可以工作(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"))