簡體   English   中英

使用facet_grid時,我可以為x和y以外的美學(例如大小)設置自由比例嗎?

[英]Can I set free scales for aesthetics other than x and y (e.g. size) when using facet_grid?

facet_grid和facet_wrap有scale參數,據我所知,每個繪圖都允許每個繪圖調整x和/或y軸的刻度到繪制的數據。 因為根據ggplot x和y的語法只是眾多美學中的兩個,並且每個美學都有一個尺度,我認為讓每個美學都是自由的選擇是合理的,但到目前為止我沒有找到一種方法。

我試圖特別為尺寸設置它,因為有時變量會以不同的數量級生存,具體取決於我用於構面的組,並且每個組具有相同的比例阻止了在內部看到的可能性 - 小組變異。

一個可重復的例子:

set.seed(1)
x <- runif(20,0,1)
y <- runif(20,0,1)
groups <- c(rep('small', 10), rep('big', 10))
size_small <- runif(10,0,1)
size_big   <- runif(10,0,1) * 1000

df <- data.frame(x, y, groups, sizes = c(size_small, size_big))

以及繪圖的輔助功能:

basic_plot <- function(df) ggplot(df) + 
  geom_point(aes(x, y, size = sizes, color = groups)) + 
  scale_color_manual(values = c('big' = 'red', 'small' = 'blue')) +
  coord_cartesian(xlim=c(0,1), ylim=c(0,1))

如果我按原樣繪制數據,我們得到以下結果:

basic_plot(df)

非刻面情節

藍點相對較小,但我們無能為力。 如果我們添加facet:

basic_plot(df) +
  facet_grid(~groups, scales = 'free')

多面的情節

藍點繼續很小。 但我想利用這樣一個事實:我將數據分成兩部分,並允許尺寸比例調整到每個圖的數據。 我希望得到以下內容:

plot_big <- basic_plot(df[df$groups == 'big',])
plot_small <- basic_plot(df[df$groups == 'small',])

grid.arrange(plot_big, plot_small, ncol = 2)

我想要的是

是否可以在不采用這種微觀管理或手動重新縮放尺寸的情況下完成,如下所示?

df %>% 
  group_by(groups) %>% 
  mutate(maximo = max(sizes),
         sizes = scale(sizes, center = F)) %>% 
  basic_plot() +
  facet_grid(~groups)

我可以設法做那些事情,我只是想看看我是不是錯過了另一種選擇,或者我是否誤解了圖形的語法。

感謝您的時間!

如上所述,調用facet_wrap時保持原始的情節美學。 由於您需要分組圖,請考慮包含在do.call base::by (子集化數據框函數):

do.call(grid.arrange, 
        args=list(grobs=by(df, df$groups, basic_plot), 
                  ncol=2,
                  top="Grouped Point Plots"))

分組繪圖輸出


如果你需要分享一個傳奇,我總是使用@Steven Lockton答案中的這個包裝器

do.call(grid_arrange_shared_legend, by(df, df$groups, basic_plot))

共享圖例繪圖輸出

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM