2015-08-26 2 views
0

Я пытаюсь построить (на одном графике) два набора данных по сравнению с датой из двух разных кадров данных. Оба кадра данных имеют одинаковые точные даты для каждого из двух измерений. Я хотел бы построить эти два набора данных на одном и том же графике с разными цветами. Тем не менее, я не могу получить их на одном графике вообще. R уже читает дату как дату. Я пробовал:Графическое отображение нескольких рядов данных в R ggplot

qplot(date , NO3, data=qual.arn) 
+ qplot(qual.arn$date , qual.arn$DIS.O2, "O2(aq)" , add=T) 

и получил эту ошибку.

Error in add_ggplot(e1, e2, e2name) : 
    argument "e2" is missing, with no default 

Я попытался использовать функцию ggplot вместо qplot, но я не мог даже построить один график таким образом.

ggplot(date=qual.no3.s, aes(date,NO3)) 

Error: ggplot2 doesn't know how to deal with data of class uneval 

ПОЖАЛУЙСТА, ПОМОГАЙТЕСЬ. Спасибо!

+0

вы можете дать нам некоторые примеры данных, с которыми вы работаете. Вам нужен линейный график, в котором хранятся данные в данных? –

+1

вам нужно сделать это, добавив слои в 'ggplot2', где каждый слой имеет другой набор данных. Но похоже, что у вас возникают проблемы с основным синтаксисом 'ggplot()'. Убедитесь, что вы можете создавать базовые графики через 'ggplot()' перед переходом на несколько уровней. –

+0

Добро пожаловать в SO. Вам действительно нужно предоставить свои данные или, еще лучше, репрезентативную выборку, чтобы мы могли воспроизвести вашу проблему. Прочитайте [this] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610). – jlhoward

ответ

0

Поскольку вы не предоставили никаких данных (пожалуйста, сделайте это в будущем), вот составленный набор данных для демонстрации решения. Есть (по крайней мере) два способа сделать это: правильный путь и неправильный путь. Оба дают эквивалентные результаты в этом очень простом случае.

# set up minimum reproducible example 
set.seed(1)  # for reproducible example 
dates <- seq(as.Date("2015-01-01"),as.Date("2015-06-01"), by=1) 
df1 <- data.frame(date=dates, NO3=rpois(length(dates),25)) 
df2 <- data.frame(date=dates, DIS.O2=rnorm(length(dates),50,10)) 

ggplot предназначен для использования данных в формате "длинной". Это означает, что все значения y (концентрации) находятся в одном столбце, и есть отдельный столбец, который идентифицирует соответствующую категорию («NO3» или «DIS.O2» в вашем случае). Поэтому сначала мы объединяем два набора данных на основе даты, затем используем melt(...) для преобразования из «широких» (категории в отдельных столбцах) в «длинный» формат. Тогда мы позволяем ggplot беспокоиться о легендах, цветов и т.д.

library(ggplot2) 
library(reshape2) # for melt(...) 
# The right way: combine the data-sets, then plot 
df.mrg <- merge(df1,df2, by="date", all=TRUE) 
gg.df <- melt(df.mrg, id="date", variable.name="Component", value.name="Concentration") 
ggplot(gg.df, aes(x=date, y=Concentration, color=Component)) + 
    geom_point() + labs(x=NULL) 

«неправильный» способ сделать это, сделав отдельные вызовы geom_point(...) для каждого слоя. В вашем конкретном случае это может быть проще, но в конечном итоге лучше использовать другой метод.

# The wrong way: plot two sets of points 
ggplot() + 
    geom_point(data=df1, aes(x=date, y=NO3, color="NO2")) + 
    geom_point(data=df2, aes(x=date, y=DIS.O2, color="DIS.O2")) + 
    scale_color_manual(name="Component",values=c("red", "blue")) + 
    labs(x=NULL, y="Concentration")