Проблема с несколькими переменными в цвете эстети c в ggplot - PullRequest
1 голос
/ 04 апреля 2020

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

library(ggplot2)

t <- data.frame(x=c(3,5, 7), y=c(25, 25, 27), text=c("t1", "t1", "t2"))
test <- data.frame(x=c(1:10), y=c(20:29), factor=c(rep("a", 5),rep("b", 5)))

  ggplot(test, aes(x, y)) +
  geom_line(aes(color=factor)) +
  geom_text(inherit.aes=F, data=t, aes(x, y, label=text, color=text))

Полученный показатель:

enter image description here

Как видите, проблема в том, что легенда смешивает данные из обоих data.frame в одной легенде. И мне не удается выйти из значений из geom_text. У кого-нибудь есть идея, пожалуйста?

Ответы [ 2 ]

1 голос
/ 04 апреля 2020

Две шкалы для одной и той же эстетики c - это, как правило, то, чего вы можете избежать. Старайтесь не перегружать свой график слишком большим количеством измерений для визуализации с той же эстетикой c. Особенно у цветов есть только ограниченный диапазон, где мы можем дифференцировать их.

Ну, это были мои два цента. То, что вы хотите, стало легко с ggnewscale.

См. Ниже.

library(ggplot2)
library(ggnewscale)

textframe <- data.frame(x = c(3, 5, 7), y = c(25, 25, 27), text = c("t1", "t1", "t2"))
lineframe <- data.frame(x = c(1:10), y = c(20:29), factor = c(rep("a", 5), rep("b", 5)))

ggplot() +
  geom_line(data = lineframe, aes(x, y, color = factor)) +
  scale_color_brewer(palette = "Set2") +
  ggnewscale::new_scale_color() +
  geom_text(data = textframe, aes(x, y, label = text, color = text)) +
  scale_color_brewer(palette = "Dark2")

Лучше будет другая эстетика c. Здесь, например, очень уместно было бы linetype.

ggplot() +
  geom_line(data = lineframe, aes(x, y, linetype = factor)) +
  geom_text(data = textframe, aes(x, y, label = text, color = text)) +
  scale_color_brewer(palette = 'Paired')

Создано в 2020-04-03 пакетом Представить ( v0.3.0)

0 голосов
/ 04 апреля 2020

Вы можете просто удалить текстовую часть легенды, добавив show.legend = FALSE в свой geom_text. Вам также не обязательно указывать inherit.aes=F.

t <- data.frame(x=c(3,5, 7), y=c(25, 25, 27), text=c("t1", "t1", "t2"))
test <- data.frame(x=c(1:10), y=c(20:29), factor=c(rep("a", 5),rep("b", 5)))

test %>%
  ggplot(aes(x, y)) +
  geom_line(aes(color=factor)) +
  geom_text(inherit.aes=F, data=t, aes(x, y, label=text, color=text), show.legend = FALSE)
...