Добавление легенды для панели со списком и линейного графика — ggplot игнорирует команды

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

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

ggplot Legend Bar и Line на одном графике

Ни один из них не работал. show.legend также, кажется, был проигнорирован в geom_line aes.

Мой код для создания графика выглядит следующим образом:

ggplot(first_q, aes(fill = Segments)) +
 geom_bar(aes(x= Segments, y= number_of_new_customers), stat = 
      "identity") + theme(axis.text.x = element_blank()) +
  scale_y_continuous(expand = c(0, 0), limits = c(0,3000)) + 
  ylab('Number of Customers') + xlab('Segments') +
  ggtitle('Number Customers in Q1 by Segments') +theme(plot.title = 
       element_text(hjust = 0.5)) +
  geom_line(aes(x= Segments, y=count) ,stat = "identity", 
     group = 1, size = 1.5, colour = "darkred", alpha = 0.9, show.legend = 
     TRUE) +
  geom_line(aes(x= Segments, y=bond_count) 
       ,stat = "identity", group = 1, size = 1.5, colour = "blue", alpha = 
        0.9)  +
  geom_line(aes(x= Segments, y=variable_count) 
       ,stat = "identity", group = 1, size = 1.5, colour = "darkgreen", 
     alpha = 0.9) +
  geom_line(aes(x= Segments, y=children_count) 
        ,stat = "identity", group = 1, size = 1.5, colour = "orange", alpha 
         = 0.9) +
  guides(fill=guide_legend(title = "Segments")) + 
  scale_color_discrete(name = "Prod", labels = c("count", "bond_count", "variable_count", "children_count)))

Я новичок в R, поэтому, если требуется дополнительная информация или если этот вопрос может быть лучше представлен, дайте мне знать.

Любая помощь приветствуется.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
184
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ладно, тебе нужно убрать немного своих вещей. Я использовал набор данных mtcars, поскольку вы не предоставили свой. Я попытался сохранить ваши имена переменных и сократил график до необходимых частей. Код выглядит следующим образом:

first_q <- mtcars
first_q$Segments <- mtcars$mpg
first_q$val <- seq(1,nrow(mtcars))
first_q$number_of_new_costumers <- mtcars$hp
first_q$type <- "Line"

ggplot(first_q) +
  geom_bar(aes(x= Segments, y= number_of_new_costumers, fill = "Bar"), stat = 
             "identity") + theme(axis.text.x = element_blank()) +
  scale_y_continuous(expand = c(0, 0), limits = c(0,3000)) +
  geom_line(aes(x=Segments,y=val, linetype = "Line"))+
  geom_line(aes(x=Segments,y=disp, linetype = "next line"))

Ответ, который вы связали, уже дал ответ, но я пытаюсь объяснить. Вы хотите построить легенду, используя различные свойства ваших данных. Поэтому, если вы хотите использовать разные строки, вы можете указать это в своем aes. Это то, что показано в вашей легенде. Поэтому я использовал два разных geom_lines здесь. Поскольку aes — это оба linetype, оба отображаются в легенде linetype.

сценарий: output plot

Вы можете легко адаптировать это к своему использованию. Убедитесь, что вы используете известные ключевые слова для эстетики, если хотите решить эту проблему таким образом. Также вы можете впоследствии изменить названия заголовков, используя:

labs(fill = "costum name")

Если вы хотите добавить цвета и те же типы линий, вы можете выполнить настройку, используя scale_linetype_manual, как показано ниже (в этот раз я не использовал заливку для полос):

library(ggplot2)
first_q <- mtcars
first_q$Segments <- mtcars$mpg
first_q$val <- seq(1,nrow(mtcars))
first_q$number_of_new_costumers <- mtcars$hp
first_q$type <- "Line"
cols = c("red", "green")
ggplot(first_q) +
  geom_bar(aes(x= Segments, y= number_of_new_costumers), stat = 
             "identity") + theme(axis.text.x = element_blank()) +
  scale_y_continuous(expand = c(0, 0), limits = c(0,3000)) +
  geom_line(aes(x=Segments,y=val, linetype = "solid"),  color = "red", alpha = 0.4)+
  geom_line(aes(x=Segments,y=disp, linetype = "second"), color  = "green", alpha = 0.5)+
  scale_linetype_manual(values = c("solid","solid"),
                      guide = guide_legend(override.aes = list(colour = cols)))  

second plot

Почти сработало! Единственная проблема в том, что при изменении свойств строки вне aes легенда выдает мою строку как пустое поле. geom_line(aes(x= Segments, y=savings_count, linetype = "Savings"), stat = "identity", group = 1, size = 1.5, colour = "darkred", alpha = 0.9) Вот в легенду вписывает Сбережения, хотя и в виде пустого окошка. Приносим извинения за то, что не можем поделиться данными, это конфиденциально.

geds133 13.06.2019 12:40

@geds133 поместите альфу в aes() и добавьте scale_alpha(guide = "none") к вашему ggplot. Для получения дополнительной информации см. ответ это.

mischva11 13.06.2019 13:02

Работал отлично. Огромное спасибо

geds133 13.06.2019 13:10

Все цвета линий в легенде одного цвета. Есть ли способ изменить цвет типа линии на соответствующий на графике. Они также стали точечными. Я хочу, чтобы они были сплошной линией.

geds133 13.06.2019 14:35

Другие вопросы по теме