【发布时间】:2016-04-22 18:34:45
【问题描述】:
我可以根据一列日期和第二列值在 R 中创建一条黄土线。加载数据集后,我将下面的一列数据可视化:
scatter.smooth(x=1:length(goals$Value), y=goals$Value)
但是,如何为其他列添加多条黄土线?在一个图形中绘制所有黄土线的代码是什么?比如说,每个额外的列都被命名为 Value2、Value3、Value4 等。
【问题讨论】:
我可以根据一列日期和第二列值在 R 中创建一条黄土线。加载数据集后,我将下面的一列数据可视化:
scatter.smooth(x=1:length(goals$Value), y=goals$Value)
但是,如何为其他列添加多条黄土线?在一个图形中绘制所有黄土线的代码是什么?比如说,每个额外的列都被命名为 Value2、Value3、Value4 等。
【问题讨论】:
如果您还没有考虑过,ggplot2 包可以显着简化此类图形问题的处理,并提供更好的图形:
library(ggplot2)
library(tidyr)
set.seed(123)
df <- data.frame("days"=1:25, "v1"=rnorm(25), "v2"=(rnorm(25)+0.1))
#Reshape data from wide to long
df2 <- gather(df,var,val,c(v1,v2))
ggplot(df2,aes(x = days, y = val)) +
geom_point() +
geom_smooth(aes(colour = var),se = F)
如果你不想重塑数据,你可以像这样添加单独的行:
ggplot(df,aes(x = days, y = v1)) +
geom_point() + #Add scatter plot
geom_smooth(aes(colour = 'v1'),se = F) + #Add loess 1
geom_smooth(aes(y = v2,colour = 'v2'),se = F) + #Add loess 2... and so on
scale_colour_discrete(name = 'Line',
breaks = c('v1','v2'),
labels = c('variable 1','variable 2')) #Define legend
【讨论】:
read.csv 读取您的csv; Imo 和我使用了一些示例数据来证明代码有效,因为您没有提供实际数据的示例来运行代码。如果您直接读取 csv,则不需要单独使用 data.frame 行。最后,是的,需要复制最后一行以添加更多黄土线。
您将使用lines 函数:
# create test data
set.seed(123)
df <- data.frame("days"=1:25, "v1"=rnorm(25), "v2"=(rnorm(25)+0.1))
# first plot
scatter.smooth(x=df$days, y=df$v1)
# add plot of second lowess line
lines(loess.smooth(x=df$days, y=df$v2))
为线条添加颜色:
scatter.smooth(x=df$days, y=df$v1, lpars=list(col="red"))
lines(loess.smooth(x=df$days, y=df$v2), col="green")
【讨论】:
scatter.smooth 调用loess.smooth,它使用simpleLoess 函数生成平滑器。为确保其他行的创建方式相同,最好使用lines(loess.smooth(...))。
?par 中的颜色规范部分。