将堆叠的条形图从R转换为ggplot2

时间:2020-06-03 19:54:22

标签: r ggplot2

使用R和ggplot2进行数据分析较新。试图弄清楚如何将我的数据从R转换为ggplot2格式。数据是5个不同类别的一组值,我想制作一个堆叠的条形图,它允许我根据该值将堆叠的条形图分为3个部分。例如基于任意临界值的小,中和大值。类似于excel中100%堆叠的条形图,其中所有值的比例总计为1(在y轴上)。如果要注意的话,还有大量的数据(约1500个观测值)。

这是数据看起来像的一个示例(但是每列有大约1000个观察值)(我放了一张excel屏幕截图,因为我不知道下面的方法是否可行)

dput(sample-data)

similar to this image but the proportions are specific to the arbitrary data cutoffs and there are only 3 of them

2 个答案:

答案 0 :(得分:2)

这类问题通常是数据重组问题。参见reshaping data.frame from wide to long format
以下代码使用具有4个数字列的内置数据集iris来绘制条形图,并在重塑数据后将数据值切分为多个级别。

我选择了截止点0.20.7,但(0, 1)中的任何其他数字都可以。截止向量为brks,级别名称为labls

library(tidyverse)

data(iris)

brks <- c(0, 0.2, 0.7, 1)
labls <- c('Small', 'Medium', 'Large')

iris[-5] %>%
  pivot_longer(
    cols = everything(),
    names_to = 'Category',
    values_to = 'Value'
  ) %>%
  group_by(Category) %>%
  mutate(Value = (Value - min(Value))/diff(range(Value)),
         Level = cut(Value, breaks = brks, labels = labls, 
                     include.lowest = TRUE, ordered_result = TRUE)) %>%
  ggplot(aes(Category, fill = Level)) +
  geom_bar(stat = 'count', position = position_fill()) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

enter image description here

答案 1 :(得分:0)

这是不需要重新格式化数据的解决方案。

diamonds数据集随附ggplot2。 “颜色”列是分类的,“价格”列是数字的:

library(ggplot)

ggplot(diamonds) + 
    geom_bar(aes(x = color, fill = cut(price, 3, labels = c("low", "mid", "high"))),
             position = "fill") +
    labs(fill = "price")

enter image description here