#r #ggplot2 #legend
Вопрос:
Возникли небольшие проблемы с тем, где и как добавить легенду на этот график.
С помощью этого кода график выглядит именно так, как я хочу, за исключением того, что в нем отсутствует легенда.
library(dplyr)
library(ggplot2)
library(scales)
## QUERY FOR MOUNTAIN-200 BLACK, 38
monthly.sales<-dbGetQuery(con, "
select
convert(date, DATEADD(Day,-1 * DATEPART(DAY,soh.OrderDate) 1,soh.OrderDate)) as SalesMonth
,sum(sod.LineTotal) MonthlySales
,'A' as 'ActOrPred'
from Sales.SalesOrderDetail sod
Join Sales.SalesOrderHeader soh
on sod.SalesOrderID=soh.SalesOrderID
where sod.ProductID=782
and year(soh.OrderDate) = 2013
group by DATEADD(Day,-1 * DATEPART(DAY,soh.OrderDate) 1,soh.OrderDate)
order by SalesMonth")
monthly.sales$SalesMonth <-as.Date(monthly.sales$SalesMonth)
lm.fit<-lm(MonthlySales ~ SalesMonth,data=monthly.sales)
predicted.sales<-data.frame(SalesMonth = seq(from=as.Date('2013-12-01'),
to=as.Date('2014-06-01'),by="month"),
MonthlySales=0,ActOrPred="P")
predicted.sales$MonthlySales<-predict(lm.fit,newdata = predicted.sales)
all.months<-rbind(monthly.sales,predicted.sales)
all.months[13,2]=all.months[12,2]
ggplot(all.months,aes(x=SalesMonth,y=MonthlySales))
geom_line(data = subset(all.months,ActOrPred == 'A'),color="69b3a2",size=3)
geom_line(data = subset(all.months,ActOrPred == 'P'),color="gray",size=3,linetype="dashed")
expand_limits(y=c(0,310000))
scale_y_continuous(labels = comma)
scale_x_date(date_labels="%b %y",breaks ="2 month"
,expand=c(.06,1))
labs(title = "Forecast: Mountain-200 Black, 38"
,x="Sales Month"
,y="Revenue")
theme_bw()
theme(
plot.title = element_text(color = "#2CC4C4",size = 12,face = "bold",hjust = 0.5),
axis.line = element_line(color = "gray"),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
panel.border = element_blank())
geom_smooth(method='lm',position="identity",se=F,size=0.4,color="black")
Когда я добавляю эстетику в geom_line, появляется легенда, но она смотрит на цветовые коды, а не на «Фактические» и «Прогнозные», что мне нужно, чтобы сказать.
ggplot(all.months,aes(x=SalesMonth,y=MonthlySales))
geom_line(data = subset(all.months,ActOrPred == 'A'),aes(color="69b3a2"),size=3)
geom_line(data = subset(all.months,ActOrPred == 'P'),aes(color="gray"),size=3,linetype="dashed")
expand_limits(y=c(0,310000))
scale_y_continuous(labels = comma)
scale_x_date(date_labels="%b %y",breaks ="2 month"
,expand=c(.06,1))
labs(title = "Forecast: Mountain-200 Black, 38"
,x="Sales Month"
,y="Revenue")
theme_bw()
theme(
plot.title = element_text(color = "#2CC4C4",size = 12,face = "bold",hjust = 0.5),
axis.line = element_line(color = "gray"),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
panel.border = element_blank())
geom_smooth(method='lm',position="identity",se=F,size=0.4,color="black")
Добавление взгляда на данные в таблице. Вероятно, это простое решение, которое я просто упускаю из виду.
ПРАВКА: Внесена корректировка, чтобы получить легенду. Теперь мне нужно изменить настройки легенды. Если ничего другого, нужно изменить заголовок легенды
ggplot(all.months,aes(x=SalesMonth,y=MonthlySales))
geom_line(data = subset(all.months,ActOrPred == 'A'),aes(color=ActOrPred),size=3)
geom_line(data = subset(all.months,ActOrPred == 'P'),aes(color=ActOrPred),size=3,linetype="dashed")
expand_limits(y=c(0,310000))
scale_y_continuous(labels = comma)
scale_x_date(date_labels="%b %y",breaks ="2 month"
,expand=c(.06,1))
scale_color_manual(labels=c("Actual","Forecast"),values=c("69b3a2","gray"))
labs(title = "Forecast: Mountain-200 Black, 38"
,x="Sales Month"
,y="Revenue")
theme_bw()
theme(
plot.title = element_text(color = "#2CC4C4",size = 12,face = "bold",hjust = 0.5),
axis.line = element_line(color = "gray"),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
panel.border = element_blank())
theme(legend.title = element_text("Here"))
geom_smooth(method='lm',position="identity",se=F,size=0.4,color="black")
Ответ №1:
Я не уверен, что не использую ваши данные, но попробуйте
ggplot(all.months,aes(x=SalesMonth,y=MonthlySales))
geom_line(data = subset(all.months,ActOrPred == 'A'),aes(color="69b3a2"),size=3)
geom_line(data = subset(all.months,ActOrPred == 'P'),aes(color="gray"),size=3,linetype="dashed")
expand_limits(y=c(0,310000))
scale_y_continuous(labels = comma)
scale_x_date(date_labels="%b %y",breaks ="2 month"
,expand=c(.06,1))
labs(title = "Forecast: Mountain-200 Black, 38"
,x="Sales Month"
,y="Revenue")
theme_bw()
theme(
plot.title = element_text(color = "#2CC4C4",size = 12,face = "bold",hjust = 0.5),
axis.line = element_line(color = "gray"),
axis.text.x = element_text(size = 7),
axis.text.y = element_text(size = 7),
axis.title.x = element_text(size = 8),
axis.title.y = element_text(size = 8),
panel.border = element_blank())
geom_smooth(method='lm',position="identity",se=F,size=0.4,color="black")
scale_color_manual(labels = c("Actual", "Forecast"), values = c("69b3a2", "gray") )
Комментарии:
1. Это помогло. Мне пришлось внести одну поправку в эстетику на geom_line