2017-04-07 56 views
0

寫一個通用函數,它會在ggplot線圖中着色不同的線條我發現標題很難字,但基本上我希望能夠根據傳遞給函數調用。我無法提供我的數據,但下面的代碼將生成與我的數據框相同的形狀和樣式。它也會產生我想要完成的基本情節。R - 基於參數

a = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5) 
b = c("a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e") 
c = sample(1:100, 25, replace = TRUE) 
df = data.frame(a,b,c) 
ggplot(df, aes(x = a, y = c, group = b, colour = b))+ 
    geom_line(linetype = "dashed", size = 1, colour = "grey") 

基本上我想能夠傳遞給函數含有矢量說的值「A」,「B」,「e」和然後的情節將發生變化。現在,「a」,「b」和「e」線將以彩色顯示,並且在側面會有一個帶有該線的名稱和顏色的圖例。

我已經嘗試了一些方法,最接近成功的是在for循環中添加行,但我無法讓圖例工作,並且所有行都以相同的顏色顯示。

我意識到這個問題可能是重複的,但我一直在尋找無效的幾天,所以即使被指出一個回答的問題可能會有所幫助。 謝謝!

回答

0

你應該刪除geom_linecolour說法:

a = c(1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5) 
b = c("a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e", "a", "b", "c", "d", "e") 
c = sample(1:100, 25, replace = TRUE) 
df = data.frame(a,b,c) 
ggplot(df, aes(x = a, y = c, group = b, colour = b))+ 
    geom_line(linetype = "dashed", size = 1) 

否則你將覆蓋您的顏色映射。

0

你的繪圖功能看起來是這樣的(合格b,你要在filter_values參數繪製的值):

custom_plot <- function(.data, filter_values = c("a", "b", "e")) { 
    ggplot(.data[which(.data$b %in% filter_values), ], 
    aes(x = a, y = c, colour = b)) + 
    geom_line(linetype = "dashed", size = 1) 
} 

custom_plot(df) 

enter image description here

請注意,這是一個非常特殊的功能,這使得關於輸入數據框架(即它具有列a,b和c)的無聲假設並不檢查假設是否被滿足 - 一個適當的函數應該做到這一點。