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