Наложение графиков с разных фреймов данных в ggplot без использования легенды. - PullRequest
0 голосов
/ 15 февраля 2019

Я хочу наложить два графика: один - это простой точечный график, где переменная используется для управления размером точки;а другой простой кривой.

Вот фиктивный пример для первого графика;

library(ggplot2)
x <- seq(from = 1, to = 10, by = 1)
df = data.frame(x=x, y=x^2, v=2*x)
ggplot(df, aes(x, y, size = v)) + geom_point() + theme_classic() + scale_size("blabla")

enter image description here

Теперь давайте наложим кривую на этот график с даннымис другого фрейма данных:

df2 = data.frame(x=x, y=x^2-x+2)
ggplot(df, aes(x, y, size = v)) + geom_point() + theme_classic() + scale_size("blabla") + geom_line(data=df2, aes(x, y), color = "blue") + scale_color_discrete(name = "other", labels = c("nanana"))

Выдает ошибку:

Ошибка в FUN (X [[i]], ...): объект 'v' не найден

Значение в v не используется для рисования намеченного проклятия, но в любом случае я добавил фиктивную v в df2.

df2 = data.frame(x=x, y=x^2-x+2, v=replicate(length(x),0))  # add a dummy v
ggplot(df, aes(x, y, size = v)) + geom_point() + theme_classic() + scale_size("blabla") + geom_line(data=df2, aes(x, y), color = "blue") + scale_color_discrete(name = "other", labels = c("nanana"))

В результате получилась запутанная легенда:

enter image description here

Как правильно достичь желаемого участка?

1 Ответ

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

Вы можете указать размер aes в вызове geom_point (), чтобы он не нуждался в фиктивном v в df2.

Не уверен, что именно вы хотите относительно легенды.Если вы замените вышеуказанное, то синяя часть исчезнет.Если вы хотите иметь легенду для цвета линии, то вы должны поместить цвет внутри вызова geom_line aes.

x <- seq(from = 1, to = 10, by = 1)
df = data.frame(x=x, y=x^2, v=2*x)
df2 = data.frame(x=x, y=x^2-x+2)

ggplot(df, aes(x, y)) + 
  geom_point(aes(size = v)) + 
  theme_classic() + 
  scale_size("blabla") + 
  geom_line(data=df2, aes(x, y, color = "blue")) +
  scale_color_manual(values = "blue", labels = "nanana", name = "other")

enter image description here

...