在行上我们有“目的”,在列上我们有“成绩”。
我正在尝试使用ggplot2绘制14个单独的折线图(全部覆盖在一个图表上)。每种类型的“目的”都有一个。
在x轴上将是“等级”,在y轴上将是单元格中的百分比值。我怎么可能这样做,因为成绩和目的实际上并没有组合在一起?
答案 0 :(得分:2)
我有三个目的&等级来说明如何在ggplot上绘制线条。
数据集:
df <- data.frame(purpose = c("car", "credit card", "debt consolidation"),
a = c(26.64, 24.81, 14.04),
b = c(30.44, 35.27, 27.65),
c = c(23.93, 24.85, 29.06))
将data.frame转换为堆叠形式:
library(tidyr)
df2 <- df %>%
gather(grade, val, a:c)
绘制折线图:
ggplot(df2, aes(as.numeric(as.factor(grade)), val, colour=purpose)) +
geom_line() +
scale_x_continuous("Grades", breaks=1:3, labels=c("A", "B", "C"))
答案 1 :(得分:2)
您的数据由离散类别(目的和等级)组成,因此线图不太合适,因为它意味着连续过渡。由于每个目的的等级总和达到100%,我认为叠条是更好的选择。
library(dplyr)
library(tidyr)
library(ggplot2)
df1 <- data.frame(purpose = c("car", "credit card", "debt consolidation"),
a = c(26.64, 24.81, 14.04),
b = c(30.44, 35.27, 27.65),
c = c(23.93, 24.85, 29.06),
d = c(11.66, 10.13, 16.96),
e = c(5.18, 3.88, 8.87),
f = c(1.79, 0.90, 2.80),
g = c(0.36, 0.16, 0.62))
df1 %>%
gather(grade, value, -purpose) %>%
ggplot(aes(purpose, value)) +
geom_col(aes(fill = grade)) +
scale_fill_brewer(palette = "Spectral") +
coord_flip()