如何在每个面板中保留所有值的情况下创建不同的x轴?

时间:2018-10-30 20:48:20

标签: r ggplot2 facet-grid

比方说,我有类似以下示例的数据,

dat1 <- data.frame(group = c("a", "a","a", "a", "a", "b", "b", "b","b","b","b","b","c","c","c"),
                   subgroup = c(paste0("R", rep(1:5)),paste0("R", rep(1:7)),paste0("R", rep(1:3))),
                   value = c(5,6,0,8,2,3,4,5,2,4,7,0,3,4,0),
                   pp = c("AT","BT","CT","AA","AT","TT","RT","CC","SE","DN","AA","MM","XT","QQ","HH"))

我想添加一些截止点

dat1 = dat1[dat1$value > 2, ]

我的代码是

library(ggplot2)
pl <- ggplot(dat1, aes(y = pp, x = subgroup)) + 
        geom_point(aes(size=value)) +  
        facet_grid(cols = vars(group), scales="free", space="free")+ 
        ylab("names") +xlab(" ")
pl 

enter image description here

我想查看每个面板的所有列。例如,在第一个面板中,应该有五个子组,我在图中只看到三列,但是我只想查看所有五列,即使是截止值或零值以下。第二个面板有7个音阶。切断后,有6列,但是我想查看所有7个标度,即使它具有零。

如何修改我的代码或进行这种绘图?

1 个答案:

答案 0 :(得分:0)

您需要在不降低等级的情况下进行子集化。

dat1 <- data.frame(group = c("a", "a","a", "a", "a", "b", "b", "b","b","b","b","b","c","c","c"),
               subgroup = c(paste0("R", rep(1:5)),paste0("R", rep(1:7)),paste0("R", rep(1:3))),
               value = c(5,6,0,8,2,3,4,5,2,4,7,0,3,4,0),
               pp = c("AT","BT","CT","AA","AT","TT","RT","CC","SE","DN","AA","MM","XT","QQ","HH"))

dat1[dat1$value <= 2, 3] <- NA

pl <- ggplot(dat1, aes(y = pp, x = subgroup)) + 
 geom_point(aes(size=value)) +  
 facet_grid(~group, scales="free_x", space = "free")+ 
 ylab("names") +xlab(" ") +
 scale_size(range = c(3,8))