2017-10-20 419 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