Я также пытаюсь сделать гистограмму с линейными графиками. График создан нормально, но легенда не хочет добавлять линейные графики в легенду.
Я пробовал так много разных способов добавить их в легенду, включая:
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, поэтому, если требуется дополнительная информация или если этот вопрос может быть лучше представлен, дайте мне знать.
Любая помощь приветствуется.
Ладно, тебе нужно убрать немного своих вещей. Я использовал набор данных 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
.
Вы можете легко адаптировать это к своему использованию. Убедитесь, что вы используете известные ключевые слова для эстетики, если хотите решить эту проблему таким образом. Также вы можете впоследствии изменить названия заголовков, используя:
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)))
@geds133 поместите альфу в aes()
и добавьте scale_alpha(guide = "none")
к вашему ggplot. Для получения дополнительной информации см. ответ это.
Работал отлично. Огромное спасибо
Все цвета линий в легенде одного цвета. Есть ли способ изменить цвет типа линии на соответствующий на графике. Они также стали точечными. Я хочу, чтобы они были сплошной линией.
Почти сработало! Единственная проблема в том, что при изменении свойств строки вне aes легенда выдает мою строку как пустое поле.
geom_line(aes(x= Segments, y=savings_count, linetype = "Savings"), stat = "identity", group = 1, size = 1.5, colour = "darkred", alpha = 0.9)
Вот в легенду вписывает Сбережения, хотя и в виде пустого окошка. Приносим извинения за то, что не можем поделиться данными, это конфиденциально.