#r #ggplot2
#r #ggplot2
Вопрос:
Я строю контурные графики, используя ggplot в цикле. У меня мало забот —
- уровни цвета различны во всех итерациях, как это сделать, чтобы итерации оставались стабильными?
- количество и диапазон уровней также меняются с итерацией, как сохранить его постоянным на всех итерациях?
- длина, занимаемая цветовой шкалой, намного больше, чем фактическая цифра. Как мне это настроить ?
- Как мне вручную установить уровни цветов в контурах?
Я приложил образец ниже. Может кто-нибудь, пожалуйста, отредактировать тот же код с комментариями
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
Комментарии:
1. Спасибо @Allan Cameron, есть ли способ разделить легенду между сюжетами, потому что теперь все они имеют одинаковые уровни
2. Вы могли бы взглянуть на
get_legend
это из пакета cowplot