我正在尝试绘制一些日期点:
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不按顺序绘制数据:
预期的情节是:
如何告诉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 :(得分:3)
您一直在针对从整数强制的数字字符向量绘制日期的随机排列。你得到了你所要求的。无需重新安装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)