2014-01-26 111 views
2

我有以下数据为代表的多变量数据集:轴线不与日期标签绘制

financials <- 
    "A   B   C   D   E   Dates 
52730.1  104761.1 275296.1  569423.1 1136638.1 2013-12-2 
77709  97940  275778  515095  1075166  2013-08-04 
102734  71672  227017  482068  1011764  2013-03-17 
96345  74035  240334  429026  998734  2012-10-28 
98651  62305  236694  436948  962913  2012-06-10 
78804  73568  242068  471640  945891  2012-01-22" 
fData <- read.table(text = financials, header = TRUE) 

我绘制在同一地块的所有变量(A,B,..等)。这里是我的代码,它的工作原理:

range <- range(fData[,-6]) 
fData$Dates <- as.Date(fData$Dates, origin = "2011-07-03") 
Labels <- seq(as.Date("2012-01-22", origin = "2011-07-03"), 
       to = as.Date("2013-12-2",origin = "2011-07-03"), 
       by = "2 months") 
plot(A ~ Dates, fData, type = "o", col = "red", ylim = range, xaxt="n", pch = 10) 
points(B ~ Dates, fData, type = "o", col = "green", pch = 11) 
points(C ~ Dates, fData, type = "o", col = "black", pch = 12) 
points(D ~ Dates, fData, type = "o", col = "blue", pch = 13) 
points(E ~ Dates, fData, type = "o", col = "magenta", pch = 14) 

我试过的功能轴添加x轴,如以下,但在x轴没有表现出向上

axis(side = 1, at = seq(1,12), labels = Labels) 

然后我试图axis.Date函数我得到一个错误'origin'必须被提供。

axis.Date(side = 1, x = Labels, at = seq(1,12), format = "%m/%y", origin = "2011-07-03") 

我需要的是:(1)12日期标签“标签”与在45度和(2)格式化的y轴显示在$ 100,000个蜱金融数据倾斜于x轴12的刻度线,(3)请帮我理解我的错误。

非常感谢提前。

+2

我非常感谢lukeA,斯文海恩斯坦和亨里克技术知识和他们的时间。 –

回答

1

首先,创建无轴的情节(axes = FALSE):

plot(A ~ Dates, fData, type = "o", col = "red", ylim = range, pch = 10, 
    axes = FALSE) 
points(B ~ Dates, fData, type = "o", col = "green", pch = 11) 
points(C ~ Dates, fData, type = "o", col = "black", pch = 12) 
points(D ~ Dates, fData, type = "o", col = "blue", pch = 13) 
points(E ~ Dates, fData, type = "o", col = "magenta", pch = 14) 

因为您需要倾斜标签,所以不能使用axis.Date作为x轴。你必须结合axis(为刻度线),并text的标签:在这里,format使用创建标签:

axis(side = 1, at = Labels, labels = FALSE) 
text(x = Labels, y = par("usr")[3] - 70000, labels = format(Labels, "%m/%y"), 
    srt = 45, pos = 1, xpd = TRUE) 

现在,你必须创建y轴。首先,我们需要剔位置的向量(ticksY)和标签的向量(LabelsY)。该值在指定的格式:

ticksY <- seq(0, max(range), 100000) 
LabelsY <- paste("$", format(ticksY, scientific = FALSE, big.mark = ",")) 
axis(side = 2, at = ticksY, labels = LabelsY) 

enter image description here

+1

斯文海恩斯坦,代码工作很好,但我不明白我们如何使用y值来设置x轴; par(“usr”)[3]是y1。我也不明白为什么你在“y = par(”usr“)[3] - 70000”中减去了70000。再次感谢 –

+1

@RagyIsaac'面值(“USR”)'返回绘图区域的坐标。第三个值('[3]')是较低的y坐标。我减去了'70000'单位将标签向下移动(否则它们将与轴重叠)。 –

+1

我的歉意是,你正在设置Y轴,我知道了 –

2

您可以尝试一个ggplot选择:

library(reshape2) 
library(ggplot2) 
library(scales) 

df <- melt(fData) 
df$Dates <- as.Date(df$Dates) 

ggplot(data = df, aes(x = Dates, y = value, color = variable)) + 
    geom_point() + 
    geom_line() + 
scale_x_date(breaks = date_breaks("2 month"), 
      labels = date_format("%Y-%m")) + 
    scale_y_continuous(labels = dollar, 
        breaks = seq(from = 100000, to = 1200000, by = 100000)) + 
    theme_classic() + 
    theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) 

enter image description here

如果你想手动设置点的形状和颜色,看到?scale_shape_manual?scale_color_manual

编辑:在x轴上更改日期格式。

1

at = seq(1,12)不起作用,因为日期存储为数字,1到12与日期内部表示不匹配。见例如axis(side = 1, at = Labels)和帮助?Dates

日期表示为1970-01-01以来的天数,与更早的日期 负值。

axis(side = 1, at = Labels, labels = Labels) 

作品。

但是,如果你想在标签中的基础图形是倾斜的,我认为你需要使用text()srt

text(Labels, par("usr")[3], srt = 45, adj = 1, labels = Labels, xpd = TRUE) 

最后,使用format()big.mark=格式化的y标签:

axis(side = 2, at = pretty(as.matrix(fData[, -6])), labels = format(pretty(as.matrix(fData[, -6])), big.mark=","), las=1)