[英]ggplot facet_wrap with equally spaced axes
说我有以下虚拟数据帧:
df <- data.frame(let = LETTERS[1:13], value = sample(13),
group = rep(c("foo", "bar"), times = c(5,8)))
df
let value group
1 A 2 foo
2 B 1 foo
3 C 12 foo
4 D 8 foo
5 E 4 foo
6 F 13 bar
7 G 11 bar
8 H 3 bar
9 I 7 bar
10 J 5 bar
11 K 10 bar
12 L 9 bar
13 M 6 bar
将ggplot与facet_wrap结合使用可使我为每个组制作一个面板...
library(ggplot2)
ggplot(df, aes(x= let, y = value)) +
geom_point() +
coord_flip() +
facet_wrap(~group, scales = "free")
..但垂直轴的间距不相等,即,左侧图比右侧图包含更多的垂直刻度。 我想用(未标记的)刻度(没有绘制值)填充右垂直轴。 在这种情况下,这将添加3个空滴答声,但是它应该可以扩展到任何df大小。
做到这一点的最佳方法是什么? 我应该更改数据帧,还是可以使用ggplot做到这一点?
我不确定您为什么要像美学以外的其他方式在图表上排列类别变量(看起来确实更好)。 无论如何,似乎可以处理一般情况的简单变通办法是,注意到ggplot
使用数字刻度来绘制分类变量。 然后,图表的解决方法是为每个x值在y值处绘制一个透明点,该点等于分类变量的数量。 绘制所有x值的点,作为每个组x值不重叠范围的简单解决方案。 我将另一个组添加到您的数据框中,以使示例更加通用。
library(ggplot2)
set.seed(123)
df <- data.frame(let = LETTERS[1:19], value = c(sample(13),20+sample(6)),
group = rep(c("foo", "bar", "bar2"), times = c(5,8,6)))
num_rows <- xtabs(~ group, df)
max_rows <- max(num_rows)
sp <- ggplot(df, aes(y= let, x = value)) +
geom_point() +
geom_point(aes(y = max_rows +.5), alpha=0 ) +
facet_wrap(~group, scales = "free", nrow=1 )
plot(sp)
使用free_x
代替free
,如下所示:
ggplot(df, aes(x= let, y = value)) +
geom_point() +
coord_flip() +
facet_wrap(~group, scales = "free_x")+
theme(axis.text.y=element_blank(),
axis.ticks.y=element_blank())
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.