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))
)即可。事实上,这是为了美学,因为我用它来做演示。简洁的解决方案。事实上,这是为了美学,因为我用它来做演示。