R ggplot具有等距轴的面_包裹

R ggplot具有等距轴的面_包裹,r,ggplot2,axis,facet-wrap,R,Ggplot2,Axis,Facet Wrap,假设我有以下虚拟数据帧: 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

假设我有以下虚拟数据帧:

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

..但垂直轴的间距不相等,即左图包含的垂直记号多于右图。我想用(未标记的)记号(没有打印值)填充右垂直轴。在这种情况下,这将添加3个空刻度,但它应该可以扩展到任何df大小


实现这一目标的最佳方式是什么?我是否应该更改数据帧,或者是否有办法使用ggplot进行更改?

使用
free\u 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())

使用
free\u 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())

需要
magrittr
(对于复合分配管道
%%
)的笨拙解决方案:

df%%
rbind(data.frame(let=c(“,”,“),
值=NA,
group=“foo”))


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

一个需要
magrittr
(对于复合分配管道
%%
):

df%%
rbind(data.frame(let=c(“,”,“),
值=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)
库(ggplot2)
种子集(123)

df我不知道你为什么要在你的图表上安排分类变量,而不是美学(看起来确实更好)。无论如何,一个似乎可以处理一般情况的简单解决方法是注意,
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)
库(ggplot2)
种子集(123)

df,在每个垂直轴上创建一个带有13个记号的绘图,而不是我看到的预期的8个记号(不是我真正df的解决方案)。在你的问题中,你提到“我想加3”。我对你想要达到的目标有点困惑。这会创建一个在每个垂直轴上有13个刻度的图,而不是我看到的预期的8个刻度(不是我真正的df的解决方案)。在你的问题中,你提到“我想加3”。我对您试图实现的目标有点困惑。
,,,“
smart!”:-)但是,您不需要使用
dplyr
,使用简单的
rbind
ggplot(rbind(df2,df))
)。
,,,,
smart!:-)但是,您不需要dplyr,使用简单的rbind(
ggplot(rbind(df2,df))
)即可。事实上,这是为了美学,因为我用它来做演示。简洁的解决方案。事实上,这是为了美学,因为我用它来做演示。