Настройка уровней цвета на контурных диаграммах в ggplot R

#r #ggplot2

#r #ggplot2

Вопрос:

Я строю контурные графики, используя ggplot в цикле. У меня мало забот —

  1. уровни цвета различны во всех итерациях, как это сделать, чтобы итерации оставались стабильными?
  2. количество и диапазон уровней также меняются с итерацией, как сохранить его постоянным на всех итерациях?
  3. длина, занимаемая цветовой шкалой, намного больше, чем фактическая цифра. Как мне это настроить ?
  4. Как мне вручную установить уровни цветов в контурах?

Я приложил образец ниже. Может кто-нибудь, пожалуйста, отредактировать тот же код с комментариями

 library(tidyverse)
library(gridExtra)
library(grid)

# data generation
x <- seq(-10, 10, 0.2)
y <- seq(-10, 10, 0.2)
tbl <- crossing(x, y)

for (i in seq(1, 2)) # to create two sample plots
{
  # initialize list to store subplots
  p <- list()
  
  for (j in seq(1, 3)) # to create 3 subplots
  {
    # for randomness
    a <- runif(1)
    b <- runif(1)
    
    # add z
    tbl <- tbl %>%
      mutate(z = a*(x - a)^2   b*(y - b)^2)
    
    # plot contours
    p[[j]] <- ggplot(data = tbl,
                aes(x = x,
                    y = y,
                    z = z))  
      geom_contour_filled(alpha = 0.8)   
      theme_bw()   
      theme(legend.position = "right")   
      theme(aspect.ratio = 1)  
      ggtitle("Sample")
    

  }
  
  p <- grid.arrange(p[[1]], p[[2]], p[[3]],
                    ncol = 3)
  
  ggsave(paste0("iteration - ", i, ".png"),
         p, 
         width = 8,
         height = 3)
}
 

Фактические участки являются подзаголовком для другого участка, поэтому я могу увеличить его размер. Поэтому ширина и высота не могут быть увеличены в ggsave.

Спасибо

Комментарии:

1. Похоже bins , binwidth аргументы и в geom_contour_filled могут быть полезны

Ответ №1:

Вы можете приступать breaks geom_contour_filled . Вы можете изменить свои png, удвоив их размер, но уменьшив вдвое их разрешение. Они останутся неизменными с точки зрения размеров в пикселях.

 for (i in seq(1, 2)) # to create two sample plots
{
  p <- list()
  
  for (j in seq(1, 3)) # to create 3 subplots
  {
    # for randomness
    a <- runif(1)
    b <- runif(1)
    
    tbl <- tbl %>%
      mutate(z = a*(x - a)^2   b*(y - b)^2)
    
    p[[j]] <- ggplot(data = tbl,
                aes(x = x,
                    y = y,
                    z = z))  
      geom_contour_filled(alpha = 0.8, breaks = 0:9 * 20)   
      scale_fill_viridis_d(drop = FALSE)  
      theme_bw()   
      theme(legend.position = "right")   
      theme(aspect.ratio = 1)  
      ggtitle("Sample")
  }
  
  p <- grid.arrange(p[[1]], p[[2]], p[[3]],
                    ncol = 3)
  
  ggsave(paste0("iteration - ", i, ".png"),
         p, 
         width = 16,
         height = 6,
         dpi = 150)
}
 

итерация-1.png

введите описание изображения здесь


итерация-2.png
введите описание изображения здесь

Комментарии:

1. Спасибо @Allan Cameron, есть ли способ разделить легенду между сюжетами, потому что теперь все они имеют одинаковые уровни

2. Вы могли бы взглянуть на get_legend это из пакета cowplot