2014-09-21 53 views
-1

我是從一個文件中獲取數據的子集,然後嘗試在ggplot2中繪製一條線。只有設法得到點(雖然我使用geom_point()+ geom_line())爲什麼我不能在子集之後劃線?

d1<-structure(list(year = structure(1:10, .Label = c("2001", "2002", 
"2003", "2004", "2005", "2006", "2007", "2008", "2009", "2010", 
"2011", "2012"), class = "factor"), val1 = c(42244L, 43161L, 
42444L, 43579L, 43424L, 45116L, 48003L, 48835L, 47856L, 50024L 
), val2 = c(0L, 0L, 0L, 0L, 18L, 0L, 0L, 7L, 0L, 0L), val3 = c(109467L, 
112956L, 110623L, 125657L, 127560L, 137180L, 156412L, 164861L, 
174395L, 180413L), val4 = c(20381L, 18346L, 16636L, 18119L, 17173L, 
19234L, 22113L, 22624L, 23374L, 23280L), val5 = c(7056L, 6679L, 
6287L, 6261L, 7197L, 7581L, 10321L, 10535L, 10242L, 12080L), 
    val6 = c(12823L, 12056L, 11101L, 11428L, 12665L, 11783L, 
    9861L, 8250L, 7802L, 6775L), val7 = c(220L, 101L, 55L, 68L, 
    212L, 85L, 95L, 125L, 49L, 81L), val8 = c(694L, 2527L, 1066L, 
    1700L, 2976L, 1665L, 1229L, 1086L, 879L, 958L), val9 = c(12439L, 
    12698L, 15351L, 12771L, 13192L, 12420L, 13753L, 14943L, 14368L, 
    10404L), val10 = c(17819L, 18221L, 15643L, 19250L, 19326L, 
    20967L, 23658L, 27208L, 30526L, 34250L), val11 = c(20446L, 
    21236L, 19994L, 22489L, 23212L, 23792L, 25363L, 25036L, 25845L, 
    27074L), val12 = c(243589L, 247981L, 239200L, 261322L, 266955L, 
    279823L, 310808L, 323510L, 335336L, 345339L)), .Names = c("year", 
"val1", "val2", "val3", "val4", "val5", "val6", "val7", "val8", 
"val9", "val10", "val11", "val12"), 
row.names = c(NA, 10L), class = "data.frame") 

,然後我跑

d2<-subset(d1[,c(1,2)]) #(here d1 is the main (csv)file) 
ggplot(d2,aes(x=year,y=val1))+geom_line()+geom_point() 
# geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

爲qplot同樣的事情,使用GEOM = 「行」 時,是表示該通知,但不使用的geom =「線」,它顯示了點沒有任何音符/錯誤現在

qplot(y=val1,x=year,data=d2,geom="line") 
# geom_path: Each group consist of only one observation. Do you need to adjust the group aesthetic? 

當我手動創建一個數據幀作爲

d2<-data.frame(year=c(2001,2002,2003,2004,2005,2006, 
2007,2008,2009,2010,2011,2012), 
value=c(20446,21236,19994,22489,23212,23792,25363, 
25036,25845,27074,28878,31117)) 

我可以畫線。無法弄清楚什麼是錯的。 謝謝

+1

你需要做一個[可重現的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。你如何對數據框進行子集劃分?你的繪圖命令究竟是什麼樣的?理想的你應該發佈一個最小的例子,我們可以複製/粘貼到R,並得到相同的錯誤 – MrFlick 2014-09-21 03:13:03

+0

Downvoted發佈錯誤消息與不完整的代碼(因此不清楚)。 – 2014-09-21 03:14:24

+0

完成。請確定歧義是否仍然存在。 – 2014-09-21 03:38:17

回答

1

無論出於何種原因,你有你的年份在csv中的因素,他們是你的「手動創建」的數字。因素用於趨向於具有不同繪圖規則的分類變量而不是連續變量。

你可以做

ggplot(d2,aes(x=as.numeric(as.character(year)),y=val1))+geom_line()+geom_point() 

的一年轉換回數字,但它可能會更好弄清楚爲什麼它導入到R作爲首先的一個因素。機會是你有壞數據。

+0

謝謝先生,找出這個問題背後的原因。數據中可能存在問題。爲了更深入的瞭解,我可以問爲什麼會這樣。我第一次遇到這個問題。爲什麼當我對數據進行子集化並寫入新文件並再次讀取時,數據表現異常/不正確? – 2014-09-21 05:21:36

+1

這是因爲平面文本文件不是存儲數據的好方法。它們不允許你保存關於數據類型的元數據。每次你閱讀它們時都必須猜測每列的變量類別。很有可能當你的數據集合被刪除時,你將刪除非數字值,所以當你在下一次讀到R時會認爲年份是一個數字 – MrFlick 2014-09-21 14:13:53

+0

現在先用as.numeric,x軸的年數值,傾向於像2000年,2002年5月,2005年等等。沒有得到x軸的年份的原始值,即2001,2002,2003等等。我應該怎麼做來簡化這個?我應該把它作爲一個單獨的問題嗎? – 2014-09-21 14:55:32

相關問題