[英]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.