我目前使用ggplot2
创建了几个箱形图。每个方块图都显示相似的数据,但离散x轴的范围以及连续的y轴并不总是相同。一些盒子图只有两个离散的x值,其他的有三个或五个。另外,连续的y轴具有非常不同的范围;一些范围从0-80,其他从0-2.5。ggplot2:设置每个离散x点的绝对距离
理想情况下,我想得到以下输出:每图中,所有的y轴的应该是相同的绝对长度,并且每一个离散的“步骤”沿x轴应该是相同的绝对长度也是如此。
library(ggplot2)
library(grid)
x1 <- factor(c('a','b','c','d','e'))
y1 <- c(10,20,50,60,80)
df1 <- data.frame(x1,y1)
x2 <- factor(c('a','b'))
y2 <- c(2,3.5)
df2 <- data.frame(x2,y2)
g1 <- ggplot(df1, aes(x = x1, y = y1)) +
geom_bar(stat='identity')
g2 <- ggplot(df2, aes(x=x2,y=y2)) +
geom_bar(stat='identity')
grid.newpage()
pushViewport(viewport(layout = grid.layout(2, 1)))
print(g1, vp = viewport(layout.pos.row = 1, layout.pos.col = 1))
print(g2, vp = viewport(layout.pos.row = 2, layout.pos.col = 1))
这让下面的输出:
我已经用柱状图代替箱线图,显示问题创造了一个简单的例子
基本上,我想底部图仅与顶部图的a和b部分一样宽,从而使得两个图中的每个条相同的宽度为绝对宽度。请注意,我的图形将单独绘制,而不是网格的一部分。
我试过使用coord_fixed()
来玩纵横比,但是由于y轴有这样的不同范围,所以没有一个一致的值可以用于每个图形。调整geom_boxplot
的实际width
会改变各个框的相对宽度,而不是其绝对宽度。
我可能会使用解决方案ggplot2 scale_x_continuous limits or absolute使用scale_x_discrete
,但我必须裁剪第二个图像。
我也尝试调整其他问题的解决方案,如Setting absolute size of facets in ggplot2,GGPLOT2: Distance of discrete values of from each end of x-axis和Formatting positions on discrete scale in ggplot2,但目前还没有任何工作。
任何帮助将不胜感激!
编辑回应@ tonytonov的回答
调整scale_x_discrete
正如我上面提到的,并在下面@ tonytonov的答案,结果如下图:
不过,我想喜欢刚刚得到下面的图(我用Inkscape剪下图):
如上所述,我只是绘制在网格图形显示我想在y轴和绝对 X步长的绝对长度是相同的。
再次感谢!
谢谢您的回答!这个解决方案就是我在上面的问题中调整'scale_x_discrete'的意思。因为我不需要空的类别,有没有办法保持酒吧的宽度等,而不必在另一个程序中裁剪情节?我可以很容易地做到这一点,如果我不必为每张图都做到这一点,它会为我节省很多时间。也非常感谢'gridExtra'提示! – MSJ
啊,我明白了,那是一个不同的故事。我会看看,但我不指望它会很容易。 – tonytonov
这可能有所帮助:https://github.com/baptiste/gridextra/wiki/arrange-ggplot – tonytonov