我有一个列表和一些数据
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
但是这不适用于任何线型。
答案 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))