使用R和ggplot2进行数据分析较新。试图弄清楚如何将我的数据从R转换为ggplot2格式。数据是5个不同类别的一组值,我想制作一个堆叠的条形图,它允许我根据该值将堆叠的条形图分为3个部分。例如基于任意临界值的小,中和大值。类似于excel中100%堆叠的条形图,其中所有值的比例总计为1(在y轴上)。如果要注意的话,还有大量的数据(约1500个观测值)。
这是数据看起来像的一个示例(但是每列有大约1000个观察值)(我放了一张excel屏幕截图,因为我不知道下面的方法是否可行)
dput(sample-data)
答案 0 :(得分:2)
这类问题通常是数据重组问题。参见reshaping data.frame from wide to long format。
以下代码使用具有4个数字列的内置数据集iris
来绘制条形图,并在重塑数据后将数据值切分为多个级别。
我选择了截止点0.2
和0.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))
答案 1 :(得分:0)