如何使用ggplot2在多面图中定义y轴折断? [英] How to define y axis breaks in a facetted plot using ggplot2?
问题描述
我必须绘制具有非常不同的范围值的数据.我正在使用带有facet_grid(variable ~ ., scales = "free")
选项的ggplot2构面设计.但是,我想在y轴上设置中断点的值,以使所有变量的中断点均为c(0, max(variable)/2, max(variable))
.我尝试使用scale_y_continuous
,但是没有用.
I have to plot data with very different range values. I am using the facet design of ggplot2 with the option facet_grid(variable ~ ., scales = "free")
. However, I would like to set the values of the breaks on the y axis such that for all variables the breaks are c(0, max(variable)/2, max(variable))
. I tried using scale_y_continuous
, but it did not work.
可复制的示例:
v1 <- sample(rnorm(100, 10, 1), 30)
v2 <- sample(rnorm(100, 20, 2), 30)
v3 <- sample(rnorm(100, 50, 5), 30)
fac1 <- factor(rep(rep(c("f1", "f2", "f3"), each = 10), 3))
library(reshape2)
library(ggplot2)
df1 <- melt(data.frame(fac1, v1, v2, v3))
ggplot(df1, aes(fac1, value, group = variable)) +
geom_point() +
facet_grid(variable ~ ., scales = "free") +
theme_bw()
推荐答案
这将绘制三个单独的图,其中y中断设置为0、0.5 * max(value)和max(value).使用gtable rbind函数组合这三个图,然后绘制.
This draws the three separate plots, with the y breaks set to 0, 0.5*max(value), and max(value). The three plots are combined using the gtable rbind function, then drawn.
v1 <- sample(rnorm(100, 10, 1), 30)
v2 <- sample(rnorm(100, 20, 2), 30)
v3 <- sample(rnorm(100, 50, 5), 30)
fac1 <- factor(rep(rep(c("f1", "f2", "f3"), each = 10), 3))
library(reshape2)
library(ggplot2)
library(grid)
library(gridExtra)
df1 <- melt(data.frame(fac1, v1, v2, v3))
# Draw the three charts, each with a facet strip.
# But drop off the bottom margin material
dfp1 = subset(df1, variable == "v1")
p1 = ggplot(dfp1, aes(fac1, value, group = variable)) +
geom_point() +
facet_grid(variable ~ .) +
scale_y_continuous(limits = c(0, ceiling(max(dfp1$value))),
breaks = c(0, ceiling(max(dfp1$value))/2, ceiling(max(dfp1$value)))) +
theme_bw()
g1 = ggplotGrob(p1)
pos = g1$layout[grepl("xlab-b|axis-b", g1$layout$name), "t"]
g1 = g1[-pos, ]
# Drop off the bottom margin material
dfp2 = subset(df1, variable == "v2")
p2 = ggplot(dfp2, aes(fac1, value, group = variable)) +
geom_point() +
facet_grid(variable ~ .) +
scale_y_continuous(limits = c(0, ceiling(max(dfp2$value))),
breaks = c(0, ceiling(max(dfp2$value))/2, ceiling(max(dfp2$value)))) +
theme_bw()
g2 = ggplotGrob(p2)
g2 = g2[-pos,]
dfp3 = subset(df1, variable == "v3")
p3 = ggplot(dfp3, aes(fac1, value, group = variable)) +
geom_point() +
facet_grid(variable ~ .) +
scale_y_continuous(limits = c(0, ceiling(max(dfp3$value))),
breaks = c(0, ceiling(max(dfp3$value))/2, ceiling(max(dfp3$value)))) +
theme_bw()
g3 = ggplotGrob(p3)
# Combine the three gtables
g = rbind.gtable(g1, g2, size = "max")
g = rbind.gtable(g, g3, size = "max")
# Draw the plot
grid.newpage()
grid.draw(g)
这篇关于如何使用ggplot2在多面图中定义y轴折断?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!