Два разных цветовых ключа в ggplot - PullRequest
0 голосов
/ 13 февраля 2019

Я хотел бы нанести точки дважды, используя две разные цветовые шкалы:

В приведенном здесь примере 5 точек тонут, а цвет отображается на две ковариаты (cov1 и cov2): cov1 и cov2 находятся в разных масштабах.От 1 до 5 и от 0,01 до 0,05 соответственно.

Я хочу иметь 2 независимых цветовых клавиши, одну для cov1 и одну для cov2, что немного похоже на график ниже.Однако на приведенном ниже графике я использовал 'color = cov1' end 'fill = cov2', чтобы получить еще один цветовой ключ ...

Любая помощь будет признательна.

   gg1 <- ggplot(data = df1 , aes( x = x , y = y ) ) +
   geom_point( aes(x = x , y = y - 1 , color = cov1 ))  +
   geom_point( aes(x = x , y = y + 1 , color =  cov2  )) +
   scale_y_continuous(limits = c(-3,3)) 

  gg2 <- ggplot(data = df1 , aes( x = x , y = y ) ) +
  geom_point( aes(x = x , y = y - 1 , color = cov1 ))  +
  geom_point( aes(x = x , y = y + 1 , fill =  cov2  ), pch = 21 ) +
  scale_y_continuous(limits = c(-3,3)) 

grid.arrange( gg1 , gg2 , ncol = 2 )

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Я использовал вашу идею о комбинировании col и fill и небольшого хака, чтобы использовать различные формы для cov1 и cov2:

# sample data
my_data <- data.frame(x = 1:5,
                      cov1 = 1:5,
                      cov2 = seq(0.01, 0.05, 0.01))

library(ggplot2)

ggplot() + 
  geom_point(data = my_data, aes(x = x, y = 0.5, col = cov1), shape = 16) +
  scale_color_continuous(low = "red1", high = "red4") + 
  geom_point(data = my_data, aes(x = x, y = -0.5, fill = cov2), shape = 21, col = "white", size = 2) + 
  ylim(-1, 1)

enter image description here

Надеюсь, это поможет.

0 голосов
/ 13 февраля 2019

В базовом ggplot2 невозможно, если я правильно помню.Но этот репозиторий может быть вашим ответом:

https://github.com/eliocamp/ggnewscale

или это (упомянуто в описании предыдущего):

https://github.com/clauswilke/relayer

Я не использовал ggplot2 в течение достаточно долгого времени, поэтому я не знаком с этими двумя, но я помню, что использовал один из них хотя бы один раз.

Я только что написал быстрый пример, чтобы проверить, работает ли он:

d1 <- data.frame(x=1:5, y=1)
d2 <- data.frame(x=1:5, y=2)

library(ggplot2)
library(ggnewscale)

ggplot() +
  geom_point(data = d1, aes(x=x, y=y, color = x)) +
  scale_color_continuous(low = "#0000aa", high="#ffffff") +
  new_scale_color() +
  geom_point(data = d2, aes(x=x, y=y, color = x)) +
  scale_color_continuous(low = "#aa0000", high="#00aa00") 

example

И, кажется, работает так, как вы хотите.

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