1

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

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

虽然我使用arrange来对数据进行排序,但ggplot并没有按顺序绘制数据: 在此处输入图像描述

预期的情节是:

在此处输入图像描述

如何告诉 ggplot 以给定的顺序绘制 c1 列,而不是“字符”类型的自然排序顺序?

会话信息():

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      

输入(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")
4

1 回答 1

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)
于 2012-12-08T15:58:06.977 回答