簡體   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