簡體   English   中英

facet_grid 中的自由色階

[英]Free colour scales in facet_grid

假設我有以下數據框:

# Set seed for RNG
set.seed(33550336)

# Create toy data frame
loc_x <- c(a = 1, b = 2, c = 3)
loc_y <- c(a = 3, b = 2, c = 1)
scaling <- c(temp = 100, sal = 10, chl = 1) 

df <- expand.grid(loc_name = letters[1:3], 
                  variables = c("temp", "sal", "chl"), 
                  season = c("spring", "autumn")) %>% 
  mutate(loc_x = loc_x[loc_name],
         loc_y = loc_y[loc_name],
         value = runif(nrow(.)),
         value = value * scaling[variables])

看起來像,

# > head(df)
#   loc_name variables season loc_x loc_y     value
# 1        a      temp spring     1     3 86.364697
# 2        b      temp spring     2     2 35.222573
# 3        c      temp spring     3     1 52.574082
# 4        a       sal spring     1     3  0.667227
# 5        b       sal spring     2     2  3.751383
# 6        c       sal spring     3     1  9.197086

我想使用variablesseason在分面網格中繪制這些數據來定義面板,如下所示:

g <- ggplot(df) + geom_point(aes(x = loc_name, y = value), size = 5)
g <- g + facet_grid(variables ~ season) 
g

在此處輸入圖片說明

如您所見,不同的variables具有非常不同的尺度。 所以,我使用scales = "free"來解決這個問題。

g <- ggplot(df) + geom_point(aes(x = loc_name, y = value), size = 5)
g <- g + facet_grid(variables ~ season, scales = "free") 
g

在此處輸入圖片說明

多方便。 現在,假設我想這樣做,但是通過loc_xloc_y繪制點,並用顏色而不是 y 位置表示value

g <- ggplot(df) + geom_point(aes(x = loc_x, y = loc_y, colour = value), 
                             size = 5)
g <- g + facet_grid(variables ~ season, scales = "free") 
g <- g + scale_colour_gradient2(low = "#3366CC", 
                                mid = "white", 
                                high = "#FF3300", 
                                midpoint = 50) 
g

在此處輸入圖片說明

請注意,標不是自由的,並且與第一個圖一樣, salchl值不容易讀取。

我的問題:是否可以做等效的scales = "free"但對於顏色,以便每一行(在這種情況下)都有一個單獨的顏色條? 或者,我是否必須繪制每個變量(即圖中的行)並使用諸如cowplot東西將它們拼湊在一起?

使用dplyr的開發版本:

library(dplyr)
library(purrr)
library(ggplot2)
library(cowplot)

df %>% 
  group_split(variables, season) %>% 
  map(
    ~ggplot(., aes(loc_x, loc_y, color = value)) + 
      geom_point(size = 5) +
      scale_colour_gradient2(
        low = "#3366CC", 
        mid = "white", 
        high = "#FF3300", 
        midpoint = median(.$value)
      ) +
      facet_grid(~ variables + season, labeller = function(x) label_value(x, multi_line = FALSE))
  ) %>% 
  plot_grid(plotlist = ., align = 'hv', ncol = 2)

在此處輸入圖片說明

暫無
暫無

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

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