我有一个清单和一些数据
l <- c('b', 'a')
frame <- data.frame(series = rep(c('a', 'b'), 6), x = c(1:12), y = c(1:12))
Run Code Online (Sandbox Code Playgroud)
我想通过绘制一条平滑的线
ggplot(frame, data) + geom_smooth(linetype=series)
Run Code Online (Sandbox Code Playgroud)
但是我需要linetype基于列表l,列表中的第一个元素l应该是正常的,列表中的第二个元素是虚线。我试过
ggplot(frame, data) + geom_smooth() + scale_linetype_manual("", values=series, breaks=l)
Run Code Online (Sandbox Code Playgroud)
但这不适用于任何线型。
您的示例数据有点奇怪,因为您有一个分组变量(系列)和一个数字列(数据),但听起来您想绘制两个变量。以下是一些可能更相关的示例数据:
frame <- data.frame(series = rep(c('a','b'),6),x = runif(12),y = runif(12))
Run Code Online (Sandbox Code Playgroud)
注意使用=而不是<-。你有没有注意到你的数据框的列名是难以形容的丑陋?;) 另请注意,我没有使用单词data,因为当它用作函数时可能会引起混淆,并且通常用作参数。
然后你可以像这样绘制两条线:
ggplot(frame,aes(x = x,y = y)) +
geom_line(aes(linetype = series,group = series))
Run Code Online (Sandbox Code Playgroud)
或者像这样的两条平滑线(由于数据量小,会抛出大量警告):
ggplot(frame,aes(x = x,y = y)) +
geom_smooth(aes(linetype = series,group = series))
Run Code Online (Sandbox Code Playgroud)
这里的关键是您传递ggplot一个数据框 ( frame),然后使用该函数将变量映射到美学aes()。在本例中,我们已将 x,y 值映射到我们的 x,y 变量,并将线型映射到系列。但是我们必须告诉 ggplot 如何对数据进行分组,因此使用了分组美学。
ggplot在这种情况下,美学可以映射到后续的几何图形,或者它们可以仅映射到使用它们的几何图形。
最后,要指定要使用的线型,您在尝试时是正确的scale_linetype_manual:
+ scale_linetype_manual(values = 2:3)
Run Code Online (Sandbox Code Playgroud)
您将values要使用的线型传递给参数的位置。在规模。您还可以将命名向量传递给values,因此指定哪些级别获得哪些线类型:
+ scale_linetype_manual(values = c('a' = 2,'b' = 3))
Run Code Online (Sandbox Code Playgroud)