使用scale_x_date更改轴格式时出错

时间:2012-07-07 13:10:44

标签: r graph ggplot2

亲爱的智人,

我已使用以下代码创建了this图表(除了+ scale_x_date除外)。

找到我用来执行此操作的数据集HERE。它看起来像这样:

GFC1CARi<-read.csv("demo.csv")
head(GFC1CARi)
  X         XX   variable       value    Var
1 1 2008-07-17 Financials 0.001772705 Financ
2 2 2008-07-18 Financials 0.017306086 Financ
3 3 2008-07-21 Financials 0.010745136 Financ
4 4 2008-07-22 Financials 0.021152194 Financ
5 5 2008-07-23 Financials 0.031195805 Financ
6 6 2008-07-24 Financials 0.026534444 Financ

当您看到上图时,x轴显示日期,例如&#34; 8月&#34;,&#34; 9月&#34; ......但是,我希望它类似于&#34; 08/2007&#34;,&#34; 09/2007&#34; ......因此,我尝试这样做会在下面显示,但它不起作用。

p <- ggplot(data=GFC1CARi,aes(x=XX, y=value, colour=Var)) +
        geom_line() + 
        opts(legend.position = "none") + 
        xlab(" ") + 
        ylab("Cumulative abnormal return") + 
        scale_x_date(labels = date_format("%m/%Y"),breaks = "1 month")

p <- direct.label(p+xlim(min(GFC1CARi$XX), max(GFC1CARi$XX)+20))

我已经尝试了breaks = ??date_format的许多其他变体,我无法显示%m /%Y,它始终是&# 34;八月&#34; ..&#34; Sep&#34; ..&#34; 10月&#34;。按照Joran的要求:

> str(GFC1CARi)
'data.frame':   1730 obs. of  5 variables:
 $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ XX      : POSIXct, format: "2008-07-17" "2008-07-18" "2008-07-21" "2008-07-22" ...
 $ variable: Factor w/ 10 levels "Financials","Industrials",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  0.00177 0.01731 0.01075 0.02115 0.0312 ...
 $ Var     : chr  "Financ" "Financ" "Financ" "Financ" ...

我甚至尝试将日期格式从POSIXct更改为as.Date,如下所示:

GFC1CARi[,2]<-as.Date(GFC1CARi[,2])
str(GFC1CARi)
'data.frame':   1730 obs. of  5 variables:
 $ X       : int  1 2 3 4 5 6 7 8 9 10 ...
 $ XX      : Date, format: "2008-07-16" "2008-07-17" ...
 $ variable: Factor w/ 10 levels "Financials","Industrials",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ value   : num  0.000983 0.015822 0.008339 0.017987 0.027186 ...
 $ Var     : chr  "Financ" "Financ" "Financ" "Financ" ...

这并不能解决问题。相反,X轴现在是{&#34; Oct&#34;,&#34; Jan&#34;,&#34; Apr&#34;那就是它。

谢谢大家。

1 个答案:

答案 0 :(得分:2)

道歉,我非常密集。我认为您在尝试使用directlabels之前正在发生错误,而不是之后的

xlim的调用只是踩踏x轴格式。只需将scale_x_date调用放在direct.labels命令中就可以了:

p <- direct.label(p + 
                  xlim(min(dat$XX), max(dat$XX)+20) + 
                  scale_x_date(labels = date_format("%m/%Y"),breaks = "1 month"))

enter image description here