使用ggplot2创建折线图

时间:2017-10-20 01:42:01

标签: r ggplot2

在行上我们有“目的”,在列上我们有“成绩”。

我正在尝试使用ggplot2绘制14个单独的折线图(全部覆盖在一个图表上)。每种类型的“目的”都有一个。

在x轴上将是“等级”,在y轴上将是单元格中的百分比值。我怎么可能这样做,因为成绩和目的实际上并没有组合在一起?

enter image description here

2 个答案:

答案 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"))

enter image description here

答案 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()

enter image description here