2017-04-07 104 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)的无声假设并不检查假设是否被满足 - 一个适当的函数应该做到这一点。