#r #ggplot2
#r #ggplot2
Вопрос:
У меня есть набор данных, страдающий от переразложения. Для упрощения я показываю среднее значение точек в определенной области с помощью графика stat_summary. Моя проблема в том, что цветовая шкала подстраивается под диапазон значений внутри каждого графика, что усложняет сравнение.
Приведенный ниже пример демонстрирует, что точки в нижнем левом углу p1 находятся в диапазоне от ~ 50 до ~ 148 (от темно-зеленого до желтого). При вычислении среднего значения на графике stat_summary, p2, я хочу, чтобы оно заканчивалось как светло-зеленые шестиугольники, поскольку среднее значение должно быть ~ 100. Однако цветовая шкала смещается, делая нижний левый шестиугольник синим и пурпурным.
Как мне переопределить автоматическое назначение цветов? Я пытался установить ручные разрывы и значения, но поскольку я использую логарифмическую цветовую шкалу, сложно оценить точное значение разных цветов. Есть ли способ «скопировать вставить» цветовую шкалу и присвоенные значения с p1 на p2?
воспроизводимый пример:
library(ggplot2)
x = c(3, 1, 1, 1, 10, 1, 1, 1, 8, 1, 4, 21, 2, 3, 54, 1, 2, 1, 5, 254)
y = c(1.00, 1.00, 1.00, 1.00, 2.50, 1.00, 1.00, 1.00, 8.00, 1.00, 2.00, 4.20, 1.00, 1.00, 4.91, 1.00, 1.00, 1.00, 2.50, 42.33)
z = c(71, 265, 430, 110, 80, 87, 100, 174, 111, 102, 157, 118, 267, 133, 102, 435, 107, 72, 123, 115)
df2 <- data.frame(x,y,z)
p1 <- ggplot(df2, aes(x, y))
geom_point(aes(colour = z), size = 5)
scale_colour_gradientn(name = "z",colours = colorRampPalette(c("dark green", "green", "yellow", "orange", "red", "purple", "blue"))(100), trans = "log")
print(p1)
p2 <- ggplot(df2, aes(x, y, z = z))
stat_summary_hex()
scale_fill_gradientn(name = "z",colours = colorRampPalette(c("dark green", "green", "yellow", "orange", "red", "purple", "blue"))(100), trans = "log")
print(p2)
Комментарии:
1. Попробуйте добавить одинаковые ограничения для обеих шкал, например
limits = c(50, 450)
2. Работает идеально @stefan tnx! 😀