答案 0 :(得分:0)
这是一种使用您的数据获取百分比堆积条形图的通用方法(之所以归类,是因为我不确定您在上面的评论中指出的确切要求):
require(tidyverse)
df %>% gather("var", "val", before, after) %>%
ggplot(aes(x=var, y=val,fill=type)) +
geom_bar(stat="identity",position="fill")
这给您-是您要找的东西吗?
答案 1 :(得分:-1)
恕我直言,accepted answer可以进行改进以更好地反映OP数据的结构
before
和after
和要实现此目的,有两种选择:
scale_discrete()
进行绘图时指定所需的顺序。下面的代码使用两种技术:
library(ggplot2)
library(tidyr)
library(dplyr)
df %>%
mutate(type = forcats::fct_inorder(type)) %>% # preserve row order
gather("var", "share", before, after) %>%
ggplot(aes(x = var, y = share, fill = type)) +
geom_col(position = "fill") +
scale_x_discrete(limits = c("before", "after"), name = NULL) + # specify column order
scale_y_continuous(labels = scales::percent)
以产生图形形式的OP数据:
此外,geom_col()
用作geom_bar(stat = "identity")
的快捷方式,并且y轴已正确标记。
由于OP没有提供可复制的数据集,而是发布了数据的图像,因此我使用了在线OCR服务将屏幕截图转换为文本。 (出于完整性考虑:如果已搜索“ online ocr”并随机选择https://www.newocr.com/,而这恰好在一开始就产生了所需的结果)。
然后,将OCR结果复制到下面的代码段中:
df <- readr::read_table2(
"type before after
january 297 237
february 182 67
march 234 34
april 55 117")