2012-12-08 48 views
1

我想要繪製一些最新點不繪製數據:ggplot給定的順序

library(ggplot2) 
library(plyr) 
set.seed(1234) 

df <- data.frame(
    c1 = as.character(1:10), 
    c2 = sample(seq(from=as.Date("2012-01-01"),to=as.Date("2012-12-01"),by="day"), 10) 
) 
df <- arrange(df,c2) 
qplot(c2,c1,data=df) + scale_x_date(breaks="1 month") 

雖然我以前安排對數據進行排序,ggplot不會爲了繪製數據: enter image description here

預期的情節是:

enter image description here

我如何告訴ggplot以給定順序繪製c1列,而不是「字符」類型的自然排序順序?

SessionInfo():

R version 2.14.1 (2011-12-22) 
Platform: x86_64-pc-linux-gnu (64-bit) 

locale: 
[1] LC_CTYPE=fr_FR.UTF-8  LC_NUMERIC=C    LC_TIME=fr_FR.UTF-8  LC_COLLATE=fr_FR.UTF-8  
[5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8 LC_PAPER=C     LC_NAME=C     
[9] LC_ADDRESS=C    LC_TELEPHONE=C    LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C  

attached base packages: 
[1] stats  graphics grDevices utils  datasets methods base  

other attached packages: 
[1] plyr_1.7.1  ggplot2_0.9.2.1 

loaded via a namespace (and not attached): 
[1] colorspace_1.2-0 dichromat_1.2-4 digest_0.5.2  grid_2.14.1  gtable_0.1.1  labeling_0.1  
[7] MASS_7.3-16  memoise_0.1  munsell_0.4  proto_0.3-9.2  RColorBrewer_1.0-5 reshape2_1.2.1  
[13] scales_0.2.2  stringr_0.6.1  tools_2.14.1  

dput(DF):

structure(list(c1 = structure(c(8L, 1L, 9L, 2L, 4L, 5L, 3L, 7L, 
10L, 6L), .Label = c("1", "10", "2", "3", "4", "5", "6", "7", 
"8", "9"), class = "factor"), c2 = structure(c(15343, 15378, 
15416, 15508, 15543, 15547, 15548, 15551, 15558, 15625), class = "Date")), .Names = c("c1", 
"c2"), row.names = c(NA, -10L), class = "data.frame") 
+0

我不能重現此行爲。你可以說你正在使用的ggplot的版本(也許來自'sessionInfo()'的一些信息?) – joran

+0

我添加了我的sessionInfo – Jeremy

+0

它應該沒有必要,但是你可以給出'dput(「df 「)'? –

回答

3

這是沒有問題(與R)。

您一直在繪製日期的隨機排列與從整數強制轉換的數字的字符向量。你正在得到你所要求的。無需重新安裝R或任何軟件包。 「c2」列中的日期將在構建圖的過程中進行排序,因此不需要對它們進行預先排序,因此將不起作用。

如果您希望y軸上的標籤爲c1值,但y值爲順序統計量(整數順序),則需要繪製1:length( c1)對照日期並更改默認標籤。 (這仍然是一個你描繪處理的預期行爲的理解困難,沒有必要重新安裝R.)這是基本的圖形解決方案:

> with(df, plot(c2,1:10, yaxt="n")) 
> axis(2, at=1:10, labels=df$c1) 

我找到ggplot文檔而不是沮喪。試着找出如何替換軸標籤是不明顯的。我嘗試update_labels沒有成功。使用不同的語言繪製該系統中的實體對我來說仍然是一個障礙。我知道很多人有相反的反應,ggplot2是很多人喜愛的軟件包。 (編輯:這似乎創建在ggplot世界所需的陰謀:)

> p <- qplot(c2, 1:nrow(df),data=df) + scale_x_date(breaks="1 month") 
> p 
> p + scale_y_discrete(labels=df$c1) 
+0

那麼你如何繪製按日期排序的c1列?這就是我想要做的 – Jeremy

+0

這就是你正在做的事情:繪製按日期排序的c1列。很顯然,你期望得到一些不同的結果,除非你沒有足夠詳細地描述你的期望來讓人們確定你的困難。 –

+0

我添加了我預計會產生的陰謀。如何告訴ggplot使用數據框中的順序而不是字符串的自然順序來繪製c1列? – Jeremy