基于列表的线型

时间:2012-04-01 23:38:16

标签: r ggplot2

我有一个列表和一些数据

l <- c('b', 'a')
frame <- data.frame(series = rep(c('a', 'b'), 6), x = c(1:12), y = c(1:12))

我希望通过

绘制平滑的线条
ggplot(frame, data) + geom_smooth(linetype=series)

但是我需要基于列表linetype的{​​{1}},列表l中的第一个元素应该是 正常,列表的第二个元素点缀。我试过了

l

但是这不适用于任何线型。

1 个答案:

答案 0 :(得分:4)

您的示例数据有点奇怪,因为您有一个分组变量(系列)和一个数字列(数据),但听起来您想要绘制两个变量。这里有一些可能更相关的示例数据:

frame <- data.frame(series = rep(c('a','b'),6),x = runif(12),y = runif(12))

请注意使用=而不是<-。您是否注意到数据框的列名难以置信? ;)另请注意,我没有使用单词data,因为它可能会因为它被用作函数而变得混乱,并且通常是一个参数。

然后你可以绘制两条这样的线:

ggplot(frame,aes(x = x,y = y)) + 
    geom_line(aes(linetype = series,group = series))

或者像这样两条平滑的线条(由于数据量小而抛出了大量警告):

ggplot(frame,aes(x = x,y = y)) + 
    geom_smooth(aes(linetype = series,group = series))

这里的关键是您使用ggplot函数将frame数据框(aes())传递给美学,然后将变量映射到美学。在这种情况下,我们将x,y值映射到x,y变量,并将maptype映射到series。但我们必须告诉ggplot如何对数据进行分组,从而使用群体审美。

美学可以在ggplot中进行映射,在这种情况下,它们会延伸到后续的几何体,或者它们只能映射到使用它们的地理位置。

最后,要指定要使用的线型,您在尝试scale_linetype_manual时是正确的:

+ scale_linetype_manual(values = 2:3)

您将要使用的线型传递给values参数。在规模。您还可以将命名向量传递给values,因此请指定哪些级别获取哪些行类型:

+ scale_linetype_manual(values = c('a' = 2,'b' = 3))