2017-10-20 114 views
-1

在行上我们有“目的”,在列上有“成绩”。使用ggplot2创建折线图

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

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

enter image description here

+0

请提供的数据为纯文本,而不是图像,让用户可以复制/粘贴。 – neilfws

+0

因为我们已在早些时候在同一天早些时候询问过您将数据包含为纯文本而不是图像,所以我在下调。请进入一些很好的问题 - 要求习惯来帮助我们帮助你。如果您按照要求编辑您的问题,我会用upvote替换掉我的downvote。 – lebelinoz

回答

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

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