sig*_*ker 23 visualization r ggplot2
在下面的示例中,如何为每个方面设置单独的ylim?
qplot(x, value, data=df, geom=c("smooth")) + facet_grid(variable ~ ., scale="free_y")
Run Code Online (Sandbox Code Playgroud)
在每个方面中,y轴采用不同的值范围,并且我希望每个方面具有不同的ylim.
对于我想看到的趋势,默认值ylims太长.
据我所知,这还没有在ggplot2中实现.然而,一个解决方法 - 将为您提供超出ggplot自动提供的ylims - 是添加"人工数据".要减少ylims,只需删除不想绘图的数据(参见和示例).
这是一个例子:
让我们设置一些您想要绘制的虚拟数据
df <- data.frame(x=rep(seq(1,2,.1),4),f1=factor(rep(c("a","b"),each=22)),f2=factor(rep(c("x","y"),22)))
df <- within(df,y <- x^2)
Run Code Online (Sandbox Code Playgroud)
我们可以使用折线图进行绘图
p <- ggplot(df,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")
print(p)
Run Code Online (Sandbox Code Playgroud)
假设我们想让y在第一行的-10和第二行的0开始,所以我们在左上图和(0,0)左下图中添加一个点(0,-10):
ylim <- data.frame(x=rep(0,2),y=c(-10,0),f1=factor(c("a","b")),f2=factor(c("x","y")))
dfy <- rbind(df,ylim)
Run Code Online (Sandbox Code Playgroud)
现在通过将x比例限制在1和2之间,不会绘制这些添加点(给出警告):
p <- ggplot(dfy,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2))
print(p)
Run Code Online (Sandbox Code Playgroud)
同样适用于通过在x值范围之外的x值处添加具有更高y值的点来扩展上述边缘.
如果你想减少ylim,这将不起作用,在这种情况下,对数据进行子集化将是一个解决方案,例如将上行限制在-10和1.5之间,你可以使用:
p <- ggplot(dfy,aes(x,y))+geom_line(subset=.(y < 1.5 | f1 != "a"))+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2))
print(p)
Run Code Online (Sandbox Code Playgroud)