R 中的 xyplot,在一个面板中有几个图,格子
xyplot in R with several plots in one panel, lattice
我有一个按以下方式构建的测试数据集:
d <- seq.Date(as.Date("2000-01-01"), as.Date("2000-01-08"), by=1)
df1 <- data.frame(time = d, type = 'type1', value = runif(length(d)))
df2 <- data.frame(time = d, type = 'group1', value = runif(length(d)))
df3 <- data.frame(time = d, type = 'group2', value = runif(length(d)))
df4 <- data.frame(time = d, type = 'pen', value = runif(length(d)))
df <- rbind(df1, df2, df3, df4)
我想使用 xyplot
函数在格子中绘制数据,其中面板显示在一列中。我可以做到以下几点:
xyplot(value~time | type, df, layout=c(1, length(levels(df$type))))
这样我有 4 行(我有很多类型)。但是,实际上我想在同一个面板中用不同的颜色绘制 group1 和 group2(这样我只有 3 行)。有人可以帮我解决这个问题吗?
您可以通过暂时忽略'group1'和'group2'中的数字来为所有'group'条记录创建一个面板。这就是 gsub()
在下面的代码中所做的——它将 'group' 类型中的所有数字替换为 ""
,从而创建一个包含三个面板而不是四个面板的条件图。
现在,唯一要做的就是为所有 levels(df$type)
定义不同的颜色。 names()
操作不是强制性的;它只是有助于保持对不同因素水平的概述,尤其是它们的顺序。
# colors
clr = c("black", "black", "orange", "black")
names(clr) = levels(df$type) # for clarification only
# grouped scatterplot
xyplot(value~time | gsub("group[[:digit:]]", "group", type), df, group = type
, layout = c(1, length(levels(df$type)) - 1), col = clr, cex = 1.2, pch = 20)
我有一个按以下方式构建的测试数据集:
d <- seq.Date(as.Date("2000-01-01"), as.Date("2000-01-08"), by=1)
df1 <- data.frame(time = d, type = 'type1', value = runif(length(d)))
df2 <- data.frame(time = d, type = 'group1', value = runif(length(d)))
df3 <- data.frame(time = d, type = 'group2', value = runif(length(d)))
df4 <- data.frame(time = d, type = 'pen', value = runif(length(d)))
df <- rbind(df1, df2, df3, df4)
我想使用 xyplot
函数在格子中绘制数据,其中面板显示在一列中。我可以做到以下几点:
xyplot(value~time | type, df, layout=c(1, length(levels(df$type))))
这样我有 4 行(我有很多类型)。但是,实际上我想在同一个面板中用不同的颜色绘制 group1 和 group2(这样我只有 3 行)。有人可以帮我解决这个问题吗?
您可以通过暂时忽略'group1'和'group2'中的数字来为所有'group'条记录创建一个面板。这就是 gsub()
在下面的代码中所做的——它将 'group' 类型中的所有数字替换为 ""
,从而创建一个包含三个面板而不是四个面板的条件图。
现在,唯一要做的就是为所有 levels(df$type)
定义不同的颜色。 names()
操作不是强制性的;它只是有助于保持对不同因素水平的概述,尤其是它们的顺序。
# colors
clr = c("black", "black", "orange", "black")
names(clr) = levels(df$type) # for clarification only
# grouped scatterplot
xyplot(value~time | gsub("group[[:digit:]]", "group", type), df, group = type
, layout = c(1, length(levels(df$type)) - 1), col = clr, cex = 1.2, pch = 20)