2012-12-08 52 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