2010-07-14 90 views
0

這是哈德利指出的一個後續問題,除非我用時間戳解決問題,否則我生成的圖形將不正確。考慮到這一點,我正在努力解決我在代碼中遇到的問題。到目前爲止,我已經從我以前的問題已被回答停止使用attach()函數贊成使用dataSet.df $ variableName 我有問題從strptime時間戳中繪製圖形。我將附上我正在使用的所有代碼和從中解析數據集的XML文件(這在以前的問題中也得到了回答)。R的時間戳,Qplot和strptime

<?xml version = "1.0"?> 
    <Company > 
<shareprice> 
    <timeStamp> 12:00:00.01</timeStamp> 
    <Price> 25.02</Price> 
</shareprice> 
<shareprice> 
    <timeStamp> 12:00:00.02</timeStamp> 
    <Price> 15</Price> 
</shareprice> 
<shareprice> 
     <timeStamp> 12:00:00.025</timeStamp> 
     <Price> 15.02</Price> 
</shareprice> 
<shareprice> 
     <timeStamp> 12:00:00.031</timeStamp> 
     <Price> 18.25</Price> 
</shareprice> 
<shareprice> 
     <timeStamp> 12:00:00.039</timeStamp> 
     <Price> 18.54</Price> 
</shareprice> 
<shareprice> 
     <timeStamp> 12:00:00.050</timeStamp> 
     <Price> 16.52</Price> 
</shareprice> 
    <shareprice> 
     <timeStamp> 12:00:01.01</timeStamp> 
     <Price> 17.50</Price> 
    </shareprice> 
    </Company> 

將R代碼我目前如下:

library(ggplot2) 
library (XML) 
test.df <- xmlToDataFrame("c:/Users/user/Desktop/shares.xml") 
test.df 
timeStampParsed <- strptime(as.character(test.df$timeStamp), "%H:%M:%OS") 
test.df$Price <- as.numeric(as.character(test.df$Price)) 
summary (test.df) 
mean(test.df$Price) 
sd (test.df$Price) 
mean(timeStampParsed) 
par(mfrow=c(1,2)) 
plot(timeStampParsed, test.df$Price) 
qplot(timeStampParsed,Price,data=test.df,geom=c("point","line"), 
     scale_y_continuous(limits = c(10,26))) 

繪圖命令產生一個圖形,但它是不是很美觀的。在qplot命令返回以下錯誤消息:

Error in sprintf(gettext(fmt, domain = domain), ...) : 
invalid type of argument[1]: 'symbol' 

在獲得這一權利的興趣(和削減問題被問)有沒有教程/網站,我可以使用嗎?再次非常感謝您的幫助。

回答

2

仍然使我在我以前的兩個答案中糾正的代碼中出現一些錯誤。因此,讓我們再試試這個,更明確:

library(ggplot2) 
library (XML) 
df <- xmlToDataFrame("/tmp/anthony.xml") # assign to df, shorter to type 
df 
sapply(df, class)   # shows everything is a factor 
summary(df)    # summary for factor: counts ! 
df$timeStamp <- strptime(as.character(test.df$timeStamp), "%H:%M:%OS") 
df$Price <- as.numeric(as.character(test.df$Price)) 
sapply(df, class)   # shows both columns converted 
options("digits.secs"=3) # make sure we show sub-seconds 
summary (df)    # real summary 
with(df, plot(timeStamp, Price)) # with is an elegant alternative to attach() 

我也qplot()得到一個錯誤,但你可能只是太少了您的數據的範圍的。所以我們試試這個:

R> set.seed(42)    # fix random number generator 
R> df$timeStamp <- df[1,"timeStamp"] + cumsum(runif(7)*60) 
R> summary(df)    # new timestamps spanning larger range 
    timeStamp       Price  
Min. :2010-07-14 12:00:54.90 Min. :15.0 
1st Qu.:2010-07-14 12:01:59.71 1st Qu.:15.8 
Median :2010-07-14 12:02:58.12 Median :17.5 
Mean :2010-07-14 12:02:55.54 Mean :18.0 
3rd Qu.:2010-07-14 12:03:52.20 3rd Qu.:18.4 
Max. :2010-07-14 12:04:51.96 Max. :25.0 
R> qplot(timeStamp,Price, data=df, geom=c("point","line"), 
+ scale_y_continuous(limits = c(10,26))) 
R> 

現在qplot()的作品。總之,您使用的數據並未滿足您所使用的qplot函數的某些最低要求 - 例如,時間軸跨度超過一秒。

一般而言,您可能需要從開始R(附帶該程序)或其他介紹文本。你先跳先進材料(日期時間數據類型,從XML讀取,因素......)並被燒燬。首先邁出第一步。

+0

Dirk感謝您的幫助。我將XML文件更改爲不止一秒,這似乎滿足qplot函數的最低要求。 – 2010-07-14 18:30:04

+0

我還看到使用strptime()修正時間戳的優勢,因爲哈德利是正確的,即在不修正時間戳創建錯誤圖的情況下執行圖,因爲x軸未縮放以表示時間線。 @Dirk我會看看程序附帶的R介紹,它只是我沒有選擇,只能從我做的地方開始。在回覆R腳本自動化的同時,您也回答了我的下一個問題之一。我使用了BATCH方法,因爲我沒有在該答案中找到腳本方法。有沒有控制輸出文件類型(創建圖形的.pdf文件)的方法? – 2010-07-14 21:34:42