格子使用条件填充颜色分组点图

时间:2014-03-21 05:38:45

标签: r plot lattice

问题:

我有两个数据框,我希望使用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)

这会创建一个情节:

enter image description here

问题:

我想实现以下情节:

enter image description here

如何重构代码以实现此目的?

注意:这不是Lattice dotplot conditional fill color的重复,因为这里的问题很接近但不同且更复杂。可能不会应用相同的答案。

1 个答案:

答案 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"))
  )

输出:

enter image description here