2017-06-02 57 views
0

年の値がgeom_line()に接続され、合計が別のgeom_point()のように表示されるように、ggplotでtimeseriesをプロットしようとしています。 x軸。geom_line()とgeom_point() - 長さの異なるデータをプロットする

Aesthetics must be either length 1 or the same as the data (1): x, y 

私はまた、異なる2つのデータフレームを使用しようとしましたが、同様のエラーを取得:私は美的内のデータのサブセットが、エラーを取得しようとしてい

。申し訳ありませんが、これは基本的な質問ですが、私は解決策を見つける運がなかった。

下記のダミーデータセットとggplot2スクリプトをご覧ください。最終的なプロットはこのように見えますが、 '2017'と 'total'を結ぶ線はなく、できればAdobe Illustratorで出力を編集する必要はありません!

助けてください。

library(ggplot2) 

##synthetic data 
Year <- seq(1996,2017) 
var1 <- sample(0:10,length(Year), replace=TRUE) 
var2 <- sample(0:10,length(Year), replace=TRUE) 
var3 <- sample(0:10,length(Year), replace=TRUE) 
var4 <- sample(0:10,length(Year), replace=TRUE) 
total <- c("total",sample(0:10,4, replace=TRUE)) 


dat <- data.frame(Year, var1,var2,var3,var4) 
dat <- rbind(dat,total) 


plt <- ggplot(data=dat, aes(x=Year)) 
plt <- plt + 
    geom_point(aes(y=var1, colour = "var1")) + 
    geom_point(aes(y=var2, colour = "var2")) + 
    geom_point(aes(y=var3, colour= "var3")) + 
    geom_point(aes(y=var4, colour = "var4")) + 
    geom_line(aes(y=var1, group=1, colour = "var1")) + 
    geom_line(aes(y=var2, group=1, colour="var2")) + 
    geom_line(aes(y=var3, group=1, colour="var3"))+ 
    geom_line(aes(y=var4, group=1, colour= "var4")) + 
    scale_colour_manual("", 
     breaks = c("var1", "var2", "var3", "var4"), 
     values = c("#d7191c","#fdae61","#abd9e9","#2c7bb6")) 
+0

の代わりにあなたの質問に答えを編集するに#rstats以上の優れた民族によって提供されるように、私は、一緒に行ったソリューション、ちょうど(適切なクレジット付き)以下の答えとしてそれを追加。 – Axeman

+0

ヘッドアップのおかげで、どのような礼儀だったかわからなかった – mlcyo

答えて

0

Twitter

library(dplyr) 
mdat <- melt(dat, id.vars = 'Year') 
ggplot(data=mdat, aes(x= (Year), y = value, col = variable, group=variable))+ 
    geom_point()+ 
    geom_line(data=filter(mdat,Year != 'total')) 
2

他のdata.frameに合計データを保存することをお勧めします。データを再構成すると、ggplotコマンドが大幅に簡略化されます。

##reshape data 
dat <- data.frame(Year, var1,var2,var3,var4) 
dat <- tidyr::gather(dat, key = var, value = value, -Year) 

##data.frames of totals 
total <- data.frame(Year = max(Year) + 1, var = paste0("var", 1:4), value = sample(0:10,4, replace=TRUE)) 

dat <- rbind(dat,total) 


plt <- ggplot(data=dat, aes(x=Year, y = value, colour = var)) + 
    geom_point() + 
    geom_line() + 
    geom_point(data = total) + 
    scale_colour_manual("", values = c("#d7191c","#fdae61","#abd9e9","#2c7bb6")) + 
    ##change xaxis to show "total" 
    scale_x_continuous(breaks = c(seq(min(dat$Year), max(dat$Year), 2), total$Year[1]), 
        labels = c(seq(min(dat$Year), max(dat$Year), 2), "Total")) 


plt 
+0

私の問題を見る時間を取ってくれてありがとう。このソリューションは、私にとっては「2017」と「トータル」が重複していますが、同様の解決策がTwitterで提供されています。元の投稿を編集して表示しました。 – mlcyo

関連する問題