0

私が取り組んだ川の推定深度値と実際の深度値をプロットしようとしています。2012年9月(グラフの終了時刻)までの推計値を持っているのに、推計値と実績値が重なる期間、推計値が正しく出力されていないようです

library(ggplot2)
library(scales)
LowerHydro<-data.frame(LowerHydrology)
LowerHydro$date <- as.Date(LowerHydro$Date, format = "%m/%d/%y")
LowerHydro<-rename(LowerHydro,c(Clarks.Lower..m.="Depth"))
qplot(main="Lower Clarks Hydrograph",xlab="Date",ylab="Depth(m)",
      date,Depth,data=LowerHydro,group=Group,color=Group,geom="line") + 
   geom_line(lwd=0.70) + 
   scale_x_date(labels=date_format("%b-%y"),
                breaks="60 days",
                limits = as.Date(c("2010-10-01","2012-09-12")),
                expand=c(0.01,0)) + 
   theme_bw()+
   labs(colour="") + 
   scale_y_continuous(expand=c(0.03,0),
                      limits=c(4,20),
                      breaks=seq(4,20,by=2),
                      labels=seq(4,20,by=2)) + 
   theme(axis.title.x=element_text(face='bold',size=16,vjust=-2)) + 
   theme(axis.title.y=element_text(face='bold',size=16,angle = 90,vjust=-0.2,hjust=0.5)) + 
   theme(plot.title=element_text(face='bold',size=25,vjust=2)) + 
   theme(axis.text.x=element_text(size=12)) + 
   theme(axis.text.y=element_text(size=12)) + 
   theme(legend.title=element_text(size=16,hjust=-0.2)) + 
   theme(legend.text=element_text(size=16)) + 
   theme(legend.key.size=unit(c(1.15,1.15),"lines")) + 
   scale_color_manual(values=c("Estimated"="black", "Actual"="blue")) + 
   theme(plot.margin = unit(c(1,-5,2,2),"lines"))

str(LowerHydro)
data.frame':    1053 obs. of  4 variables:
$ Date : Factor w/ 1053 levels "01/01/11","01/01/12",..: 561 563 565 567 569 571 572   574 576 578 ...
$ Depth: num  5.24 5.14 5.42 5.27 5.27 ...
$ Group: Factor w/ 2 levels "Actual","Estimated": 2 2 2 2 2 2 2 2 2 2 ...
$ date : Date, format: "2010-10-01" "2010-10-02" ...

with(LowerHydro, LowerHydro[date %in% seq.Date(as.Date("2012-01-01"),   as.Date("2012-01-10"), by='1 day'),])
     Date Clarks.Lower..m.     Group
457  1/1/2012           11.242 Estimated
458  1/2/2012           11.054 Estimated
459  1/3/2012           11.054 Estimated
460  1/4/2012           10.992 Estimated
461  1/5/2012           10.773 Estimated
462  1/6/2012            9.959 Estimated
463  1/7/2012            8.739 Estimated
464  1/8/2012            7.676 Estimated
465  1/9/2012            7.019 Estimated
466 1/10/2012            6.581 Estimated

qplotの退屈なコードで申し訳ありません...そのすべての美学...しかし、2011年10月以降の同じ日付範囲の実際の値と推定値があるのが気に入らないようです.画像を投稿することはできませんが、基本的に私は日付範囲全体の推定値がありますが、それらが実際の値と一致した後、推定線は時間枠の終わりまでわずかな角度で横ばいになります。

グラフへのリンクは次のとおりです。

http://s1358.beta.photobucket.com/user/jaredmilitello/media/Rplot01_zps9b29f6d3.png.html

このコードを編集して、行為の最初の日付を 2011-10-07 にする場合、元のように 2011-07-10 ではなく、エラーが発生します...本質的に、このコードはランダムな深さのない私のデータセットです。

> act <- data.frame(date=seq.Date(as.Date('2011-10-07'),
                             as.Date('2012-09-12'),
                             by='1 day'),
              Depth=rnorm(n=431, sd=100),
              Group="Actual")
Error in data.frame(date = seq.Date(as.Date("2011-10-07"), as.Date("2012-09-12"),  : 
arguments imply differing number of rows: 342, 431, 1
> est <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                           as.Date('2012-09-12'),
                           by='1 day'),
             Depth=rnorm(n=713, sd=100),
              Group="Estimate") 
> LowerHydro <- rbind(act, est)
> str(df)
function (x, df1, df2, ncp, log = FALSE)   
> qplot(date, Depth, data=LowerHydro, colour=Group, geom="line")
4

2 に答える 2

4

コメントがすでに指摘しているように、あなたのデータについてもっと知らなければ、私たちはあなたをうまく助けることができません.

期間が重複する 2 つの線をプロットしても問題ないため、データに何か問題があるに違いありません。

act <- data.frame(date=seq.Date(as.Date('2011-07-10'),
                                as.Date('2012-09-12'),
                                by='1 day'),
                  Depth=rnorm(n=431, sd=100),
                  Group="Actual")
est <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                                as.Date('2012-09-12'),
                                by='1 day'),
                  Depth=rnorm(n=713, sd=100),
                  Group="Estimate")

LowerHydro <- rbind(act, est)
str(df)

qplot(date, Depth, data=LowerHydro, colour=Group, geom="line")

ここに画像の説明を入力

助けが必要な場合は、質問を再現可能にして (コメント内のリンクを参照)、データに関するすべての関連詳細を提供してください。

また、基本的なプロットが機能するまで、プロットに加えているすべての調整を気にしないでください (ある意味で美学ではないことに注意してください)。ggplot2少なくとも、ここで質問に無関係なものをすべて入れないでください。


編集

実際のデータを見ると、問題はすぐに明らかになります。見た目を気にせずにプロットを整理する場合は、今後このような問題に遭遇することを避ける必要があります.

これは、オリジナルを実行するとどうなるかですqplot:

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")

ここに画像の説明を入力

推定グループの日付が詰め込まれていることは明らかです。実際の測定が開始された後、推定グループは約 10 年後にジャンプします。

さて、なぜそうDateなったのかというと、 に改宗したときまでさかのぼる必要がありますdateformat="%m/%d/%Y"一貫性がないことを除けば、これは素晴らしいことです。2011 年 10 月 4日以降の日付の場合、形式は から に変更さ%m/%d/%yれます%m/%d/%Y(つまり、10/01/11 から 10/01/2011 へ)。

今後これを回避するには:

  1. データをチェックして、フォーマットが一貫していることを確認してください。
  2. そのような変換を行った後、データを確認してください。
  3. プロットがどのように見えるかを心配する前に、プロットを整理してください
  4. 最も最小限の例をstackoverflowに投稿して、誰もが間違ったものを見たり、反対票を投じたり、助けに興味を持ったりしないようにします。
于 2013-02-27T23:14:21.257 に答える
1

これが私が試したものです。

プロットを試すためにいくつかのサンプル データを生成しました。

library(package=ggplot2)
library(package=scales)

LowerHydro <- data.frame(date=seq.Date(as.Date('2010-10-01'),
                                       as.Date('2012-09-12'),
                                       by='1 day'),
                         Depth=rnorm(n=713, sd=100),
                         Group=c(rep('Estimated', 363),
                                 rep('Actual', 350)))

そして、それをプロットしました(簡略化されたプロットです、気をつけてください)

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")+
    scale_x_date(labels=date_format("%b-%y"),breaks="60 days",
                 limits = as.Date(c("2010-10-01","2012-09-12")),
                 expand=c(0.01,0))+theme_bw()

すべてが期待どおりのようです。

ここで、誤ってラベル付けされた日付を最後に追加しました (最後の日付には、実際のデータと推定データの両方のデータがあります)

LowerHydro <- rbind(LowerHydro, data.frame(date=as.Date('2012-09-12'),
                             Depth=rnorm(n=1, sd=100),
                             Group='Estimated'))

そして、プロットが壊れます

qplot(date, Depth, data=LowerHydro, group=Group, color=Group, geom="line")+
    scale_x_date(labels=date_format("%b-%y"),breaks="60 days",
                 limits = as.Date(c("2010-10-01","2012-09-12")),
                 expand=c(0.01,0))+theme_bw()

推定データと実績データのそれぞれの日付範囲を確認しましたか?

于 2013-02-27T22:37:27.370 に答える