ggplot: добавить легенду и удалить заполнение графика - PullRequest
0 голосов
/ 06 декабря 2018

В настоящее время я использую следующий скрипт для построения графика с одной общей x и двумя различными осями y:

library(ggplot2)
library(scales)
scaleFactor <- max(mtcars$cyl) / max(mtcars$hp)

ggplot(mtcars, aes(x=disp)) +
  labs(title = "My Plot") +
  geom_smooth(aes(y=cyl), method="loess", col="blue") +
  geom_smooth(aes(y=hp * scaleFactor), method="loess", col="red") +
  scale_y_continuous(name="cyl", sec.axis=sec_axis(~./scaleFactor, name="hp"))

enter image description here

Вопросы:

  1. Как добавить легенду в верхнем левом углу графика?
  2. Как удалить интервал слева и справа от оси x?Примечание: + scale_x_continuous(expand = c(0, 0)) отлично работает в приведенном выше примере, но в любом другом заданном временном ряду он возвращает * «Ошибка в as.Date.numeric (значение): необходимо указать« origin »» `.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Чтобы добавить ответ RLave, метки, назначенные в легенде, которую вы заметите, не соответствуют цвету.Чтобы изменить это, назначьте команды col= в aes тексту метки и добавьте scale_fill_manual, чтобы выбрать цвета:

ggplot(mtcars, aes(x=disp)) +
  labs(title = "My Plot") +
  geom_smooth(aes(y=cyl, col="cyl"), method="loess") +
  geom_smooth(aes(y=hp * scaleFactor, col="hp"), method="loess") +
  scale_color_manual(values = c("blue", "red"))+
  scale_y_continuous(name="cyl", sec.axis=sec_axis(~./scaleFactor, name="hp"))
0 голосов
/ 06 декабря 2018

Обратите внимание, что это два совершенно разных вопроса, было бы лучше разделить их.

Вам нужно поместить оба color в aes(), затем используйте theme(legend.position = c(0.9, 0.2)) для перемещенияЛегенда.

Обратите внимание, что цвета теперь не будут соответствовать (они просто "метки"), вам следует определить собственную цветовую гамму и легенду с помощью scale_color_manual().

ggplot(mtcars, aes(x=disp)) +
  labs(title = "My Plot") +
  geom_smooth(aes(y=cyl, col="blue"), method="loess") +
  geom_smooth(aes(y=hp * scaleFactor, col="red"), method="loess") +
  scale_y_continuous(name="cyl", sec.axis=sec_axis(~./scaleFactor, name="hp")) +
  theme(legend.position = c(0.9, 0.2)) +
  scale_x_continuous(expand = c(0, 0)) 

enter image description here

Ошибка в as.Date.numeric (значение): необходимо указать 'origin' "*

Возможно, потому что x в этом случае as.Date тип, scale_x_date(expand = c(0, 0)) работает.

Вот пример:

set.seed(123)
dat <- data.frame(
  dates = seq(from=as.Date("2018-01-01"), to=as.Date("2018-01-10"), by="day"),
  val1 = sample(10),
  val2 = sample(10)
)

ggplot(dat, aes(x=dates)) +
  geom_line(aes(y=val1, color = "red")) +
  geom_line(aes(y=val2, color = "blue")) +
  theme(legend.position = c(0.9, 0.2)) +
  scale_x_date(expand = c(0,0)) +
  scale_y_continuous(name="val2", sec.axis=sec_axis(~./1, name="val2"))

enter image description here

...