Два разных цветовых ключа в ggplot
Я хотел бы нанести точки дважды, используя две разные цветовые шкалы:
В данном примере 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 )
2 ответа
В основном 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")
И, кажется, работает, как вы хотите.
Я использовал вашу идею о комбинировании 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)
Надеюсь, поможет.