我有两个数据框,我希望使用make.groups()
函数对格子的面板点图(不是ggplot2)进行可视化,以对两个数据帧进行分组。两个数据框都包含一个变量,该变量应有条件地用于通过不同的颜色填充来突出显示数据。因此,在这种情况下,groups
参数通过which
生成的变量make.groups()
处理两个数据帧之间的区别。
require(lattice)
# Make reproducable data frame
df= mtcars
df= cbind(car = rownames(df), df)
rownames(df)= NULL
df= df[1:5, c("car", "mpg", "cyl", "carb")]
# Split into 2 dataframes
df.1= df
df.2= df
# Generate slightly different values in 2nd data frame
df.2$mpg= df.2$mpg + rnorm(1,2)
# I am interested to highlight those data which have carb=1
df.1[df.1$carb==1,]
df.2[df.2$carb==1,]
# car mpg cyl carb
#3 Datsun 710 22.8 4 1
#4 Hornet 4 Drive 21.4 6 1
#
# car mpg cyl carb
#3 Datsun 710 25.53714 4 1
#4 Hornet 4 Drive 24.13714 6 1
myTheme= standard.theme(col = FALSE)
myTheme$superpose.symbol$pch= 1:7
par.settings = myTheme
dotplot(car ~ mpg | as.factor(cyl),
data=make.groups(df.1, df.2),
layout=c(3,1),
par.settings = myTheme,
groups = which,
auto.key=TRUE)
这会创建一个情节:
我想实现以下情节:
如何重构代码以实现此目的?
注意:这不是Lattice dotplot conditional fill color的重复,因为这里的问题很接近但不同且更复杂。可能不会应用相同的答案。
答案 0 :(得分:0)
经过一些进一步的研究后,我发现latticeExtra包中的as.layer()
函数是一个解决方案。
我不确定这是否是最优雅的方式,但选择性突出显示(在这种情况下只有彩色符号而非请求的填充)有效:
require(latticeExtra)
dotplot(car ~ mpg | as.factor(cyl),
data=make.groups(df.1, df.2),
layout=c(3,1),
par.settings = myTheme,
cex=1,
groups = which,
auto.key=TRUE) +
as.layer(dotplot(car ~ mpg | as.factor(cyl),
data=make.groups(df.1, df.2),
groups=carb<2,
cex=0.5,
pch=19,
col= c("white", "red"))
)
输出: