ggplot不按给定顺序绘制数据

时间:2012-12-08 14:02:28

标签: r ggplot2

我正在尝试绘制一些日期点:

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")

1 个答案:

答案 0 :(得分:3)

没有问题(使用R)。

您一直在针对从整数强制的数字字符向量绘制日期的随机排列。你得到了你所要求的。无需重新安装R或任何软件包。 'c2'列中的日期将在构建绘图的过程中进行排序,因此无需对它们进行预先排序和操作,因此无效。

如果您想要y轴上的标签为c1值,但y值为order-statistic(整数顺序),则需要绘制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)