Несколько графиков с использованием ggplot: ошибка печати графика

Пытаясь ответить на этот вопрос:

Сравните выбросы от источников автотранспорта в городе Балтимор с выбросами от источников автотранспорта в округе Лос-Анджелес, Калифорния (fips == "06037"). В каком городе с течением времени произошли более значительные изменения выбросов автотранспортных средств?

Я могу ответить на запрос, но не могу создавать легенды с помощью ggplot:

#load library
library(data.table)
library(ggplot2)

#import rds files
NEI <- readRDS("summarySCC_PM25.rds")
SCC <- readRDS("Source_Classification_Code.rds")

#convert to data tables
NEI.DT <- data.table(NEI)
SCC.DT <- data.table(SCC)

#Get data for Baltimore
NEI.DT.Baltimore <- NEI.DT[fips=="24510", ]
NEI.DT.LA <- NEI.DT[fips=="06037", ]

#Check for Motor & Vehicle in SCC data using EI.Sector
motorVehicelSrcs <- SCC.DT[grep("[Mm]obile | [Vv]ehicles",  EI.Sector),   SCC]
emissionsBaltimore <- NEI.DT.Baltimore[SCC %in% motorVehicelSrcs,    sum(Emissions), by="year"]
emissionsLA <- NEI.DT.LA[SCC %in% motorVehicelSrcs, sum(Emissions), by="year"]

View(emissionsBaltimore)
View(emissionsLA)

setnames(emissionsBaltimore , "V1" , "Emissions") 
setnames(emissionsLA , "V1" , "Emissions") 

#plot data
plot_x <- ggplot(emissionsBaltimore, aes(year, Emissions)) +     geom_line(aes(data=emissionsBaltimore, x=year, y= Emissions, colour = "MyLine1")) + geom_point(colour = "blue") + geom_line(aes(data = emissionsLA, x= year, y= Emissions, colour = "MyLine2")) + geom_point(data= emissionsLA, colour = "black") + scale_colour_manual(name="Line Color", values=c(MyLine1="green", MyLine2="red"))
print(plot_x)

Я получаю следующую ошибку:

Error: "Don't know how to automatically pick scale for object of type data.table/data.frame. Defaulting to continuous
Error: Aesthetics must either be length one, or the same length as the dataProblems:emissionsBaltimore"

Может кто-нибудь помочь в устранении ошибки?

Данные для приведенного выше кода доступны по адресу: https://d396qusza40orc.cloudfront.net/exdata%2Fdata%2FNEI_data.zip


person Ganesh Bhat    schedule 21.02.2015    source источник
comment
data = не входит aes   -  person rawr    schedule 21.02.2015
comment
Спасибо. Это решило ошибку.   -  person Ganesh Bhat    schedule 21.02.2015


Ответы (2)


Вы можете сделать это, изменив свой фрейм данных

x <- cbind(emissionsBaltimore, emissionsLA$Emissions)
colnames(x) <- c("year", "Baltimore", "LA")
y <- x %>% gather(City, Emissions, -year)

(вам нужны пакеты "tyr" для использования функции "gathe'r")

ggplot(y, aes(x=year, y=Emissions, group=City))+
    geom_point()+
    geom_line(aes(colour=City))+
    scale_colour_manual(name="Line Color", values=c("green", "red"))

в противном случае, используя функцию «мультиплот»

person Jm S.    schedule 21.02.2015

Это изменение должно работать:

plot_x <- ggplot(NULL, aes(year, Emissions)) +
          geom_line(data = emissionsBaltimore, colour = "green") + 
          geom_point(data = emissionsBaltimore, colour = "blue") + 
          geom_line(data = emissionsLA, colour = "red") + 
          geom_point(data = emissionsLA, colour = "black")
print(plot_x)

Редактировать. Если необходимо включить легенду, было бы проще объединить наборы данных в один:

library(reshape2)
emissionsAll <- melt(list(BA=emissionsBaltimore, LA=emissionsLA), id.vars="year")

plot_x2 <- ggplot(emissionsAll, aes(year, value, group=L1, color=L1)) + 
           geom_line() + 
           geom_point()
print(plot_x2)
person StrikeR    schedule 21.02.2015
comment
Это работает, но не показывает легенды, что очень важно, поэтому я использовал функцию scale_color_manual. - person Ganesh Bhat; 21.02.2015