Наложение двух графиков geom_bin2d с двумя разными цветовыми гаммами - PullRequest
0 голосов
/ 17 октября 2018

Не могу найти, как правильно указать две цветовые шкалы для двух разных наборов данных, передаваемых в geom_bin2d.

Код ниже не работает, первый вызов scale_fill_gradient игнорируется и только последний(от белого до синего) используется после выдачи следующего сообщения об ошибке:

Шкала для «заполнения» уже присутствует.Добавление еще одной шкалы для «заливки», которая заменит существующую шкалу.

Вот минимальный код для работы с:

require(ggplot2)
dfA <- data.frame(x=rnorm(50000, mean=5),  y=rnorm(50000, mean=5))
dfB <- data.frame(x=rnorm(30000, mean=25), y=rnorm(30000, mean=25))

ggplot() + theme_bw() + 
  geom_bin2d(data=dfA, aes(x=x, y=y), bins=100) +
  scale_fill_gradient(low="white", high="red") + 
  geom_bin2d(data=dfB, aes(x=x, y=y), bins=100) + 
  scale_fill_gradient(low="white", high="blue")

, и в результате получается график:

enter image description here

Есть ли способ указать две разные цветовые шкалы, чтобы точки из dfA и из dfB имели два разных цветовых градиента?

Спасибо

Ответы [ 2 ]

0 голосов
/ 19 октября 2018

Хорошо, я обнаружил, что могу решить свою проблему, передав параметр limit = c (min, max) в функцию scale_fill_gradient в ответе @ Z.Lin.

0 голосов
/ 18 октября 2018

Вы можете сначала создать два отдельных графика, затем взять базовые расчетные данные для каждого графика и объединить их:

# create separate plots
p1 <- ggplot() + theme_bw() +
  geom_bin2d(data=dfA, aes(x=x, y=y), bins=100) +
  scale_fill_gradient(low="white", high="red")

p2 <- ggplot() + theme_bw() +
  geom_bin2d(data=dfB, aes(x=x, y=y), bins=100) + 
  scale_fill_gradient(low="white", high="blue")

# combined plot using layer_data() to extract data
# from each plot above, & scale_identity to use the
# already calculated fill values
p.combined <- ggplot(data = layer_data(p1),
       aes(x = x, y = y, fill = fill)) +
  geom_tile() +
  geom_tile(data = layer_data(p2)) +
  scale_fill_identity() +
  theme_bw()

# optional: add legends to the combined plot
library(cowplot)
plot_grid(p.combined,
          plot_grid(get_legend(p2),
                    get_legend(p1),
                    ncol = 1),
          nrow = 1,
          rel_widths = c(1, 0.1)) # optimal relative widths may change, depending on plot dimensions

plot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...