繁体   English   中英

ggplot facet_wrap轴等距

[英]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做到这一点?

一个需要magrittr笨拙解决方案(对于化合物分配管道%<>% ):

df %<>% 
  rbind(data.frame(let = c(" ", "  ", "   "), 
                   value = NA, 
                   group = "foo"))

在此处输入图片说明

我只为foo添加了三个条目,它们是不同长度的空白字符串(即,只是空格)。 但是,必须有一个更优雅的解决方案。

我不确定您为什么要像美学以外的其他方式在图表上排列类别变量(看起来确实更好)。 无论如何,似乎可以处理一般情况的简单变通办法是,注意到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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM