Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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 给定百分比,如何绘制堆叠条形图?_R_Ggplot2 - Fatal编程技术网

R 给定百分比,如何绘制堆叠条形图?

R 给定百分比,如何绘制堆叠条形图?,r,ggplot2,R,Ggplot2,如何使用ggplot2绘制堆叠条形图 根据下面的数据,我希望x轴和y轴上的年份被视为叠加,以晚_%作为比例 我希望y轴根据给定的百分比填充2种颜色:0.16表示一种颜色占16%,另一种颜色占84%;每年都要用同样的方法 这是我的数据帧: year percent 1: 2015 0.16 2: 2016 0.23 3: 2017 0.14 4: 2018 0.64 5: 2019 0.15 6: 2020 0.24 我试过: ggplot(data = myd

如何使用ggplot2绘制堆叠条形图

根据下面的数据,我希望x轴和y轴上的年份被视为叠加,以晚_%作为比例

我希望y轴根据给定的百分比填充2种颜色:0.16表示一种颜色占16%,另一种颜色占84%;每年都要用同样的方法

这是我的数据帧:

   year   percent
1: 2015   0.16
2: 2016   0.23
3: 2017   0.14
4: 2018   0.64
5: 2019   0.15
6: 2020   0.24
我试过:

ggplot(data = mydata)+
geom_bar(aes(x = year, y = percent),position = 'fill', stat = 'identity')

ggplot
将只打印其中的数据。您希望包含隐含但实际不包含的数据,
(百分之一)
。我们将显式地创建它,然后绘图将很容易进行

data %>%
  mutate(percent = 1 - percent, type = "not there") %>%
  bind_rows(data) %>%
  mutate(type = coalesce(type, "there")) %>%
  ggplot(aes(x = year, y = percent, fill = type)) +
  geom_col() +
  scale_y_continuous(labels = scales::percent)

如今,
geom_col
geom_bar(stat='identity')
更受欢迎,并且默认情况下会堆叠

当然,将标签和颜色更改为您想要的任何颜色


使用此示例数据

data = read.table(text = '   year   percent
1: 2015   0.16
2: 2016   0.23
3: 2017   0.14
4: 2018   0.64
5: 2019   0.15
6: 2020   0.24', header = T)

您可以向我们展示您迄今为止所做的尝试。填写aes(),然后使用position=position\u stack()堆叠哪些值?在x轴值为
year=2015
时,您有一个
y
percent=0.16
。堆叠条形图的单个x值需要2个或多个y值,通常通过
填充
颜色映射来区分。你所有的年份都有一个y值,所以没有什么可叠加的。如果y值更多,还需要第三个变量来区分堆栈中的内容。如上所述,如果每个x轴值有多个变量,“堆叠”是有意义的。但是,看看您的代码,参数
position='fill'
在这里没有多大意义。试试这样:
ggplot(data=mydata,aes(x=year))+geom_col(aes(y=percent,fill=percent))
@GregorThomas添加您的答案