在ggplot2中更改构面图的每一行的y轴限制

时间:2014-12-04 16:47:42

标签: r ggplot2 facet

我有一个3行乘5列的facet plot。每行显示分布在不同范围内的数据。为了正确显示我的数据以便显示所有内容,我没有设置y轴限制。

这是我的代码:

require(reshape2)
library(ggplot2)
library(RColorBrewer)

fileName = paste("./data_test.csv", sep = "")

## data available here: https://dl.dropboxusercontent.com/u/73950/data_test.csv

mydata = read.csv(fileName,sep=",", header=TRUE)

dataM = melt(mydata,c("id"))
dataM = cbind(dataM,
            colsplit(dataM$variable,
                     pattern = "_",
                     names = c("Network_model", "order", "category")))
dataM$variable <- NULL
dataM <- dcast(dataM, ... ~ category, value.var = "value")
dataM$minCut <- NULL
dataM$nbr_communities <- NULL
dataM$mean_community_size <- NULL
dataM$density <- NULL

my_palette <- colorRampPalette(rev(brewer.pal(11, "Spectral")))

dataM = melt(dataM, id.vars = c("Network_model", "order", "nodesRemoved", "id"))

my_palette = c(brewer.pal(5, "Blues")[c(4)], brewer.pal(5, "Set1")[c(3)])

ggplot(dataM, aes(x= nodesRemoved ,y= value, group= order, color= order)) +
  geom_point(size = .6,alpha = .15,position="jitter") +  ## increased size
  stat_smooth(se = FALSE, size = .5, alpha = .1, method = "loess") +
  scale_color_manual(values=my_palette) +
  theme_bw() +
  theme(plot.background = element_blank(),
        axis.line = element_blank(),
        legend.key = element_blank(),
        legend.title = element_blank(),
        axis.text.x = element_text(size = 8),
        axis.text.y = element_text(size = 8)
        ) +
  scale_y_continuous("Value") + 
  scale_x_continuous("Time", limits=c(0, 100)) +

  facet_grid(variable ~ Network_model,scales="free")

产生这个:

enter image description here

现在,我想有选择地为三行中的每一行设置限制,以便第一行是limits = c(1.9,3),第二行是limits = c(0,1),第三行是limits = c(.3,.7)。

如何在ggplot2的faceting中实现这一目标?

1 个答案:

答案 0 :(得分:3)

我认为您最好的选择是在绘制数据之前修剪数据,例如与dplyr,

library(dplyr)
limits <- data.frame(variable = levels(dataM$variable),
                     min = c(1.9,0,0.3),
                     max = c(3,1,0.7))
dataC <- inner_join(dataM, limits) %>% filter(value > min, value < max)

last_plot() %+% dataC

enter image description here

(我最初的观点更大,更清楚地看到罪犯)