在ggplot中缩放x轴

时间:2016-10-25 11:44:30

标签: r plot ggplot2

我有$(document).ready(function() { $('a').click(function() { $('#myTable1 > tbody > tr').append('<td>info,</td>'); }); }); 的Object classt。我想用xts

绘制此对象

我的ggplot2对象:

xts

我想在我的情节上也有月份数字。我试过这段代码:

structure(c(463829L, 469849L, 608148L, 470825L, 560057L, 431183L, 
418000L, 508168L, 422579L, 589829L, 462264L, 487183L, 612174L, 
467904L, 454620L, 450243L, 549898L, 422026L, 508311L, 385633L, 
420200L, 619074L, 462605L, 465353L, 565804L, 464841L, 505977L, 
624608L, 491175L, 459701L, 563406L, 461595L, 499607L, 674799L, 
505167L, 637375L, 500131L, 473494L, 488527L, 613972L, 468938L, 
454034L, 566511L, 456879L, 592797L, 491368L, 481690L, 597927L
), .Tsp = c(2012, 2015.91666666667, 12), class = "ts")

但是我收到了这个错误:

library(ggplot2)
library(zoo)
library(scales)
autoplot(as.zoo(a2)) + geom_line()  
+scale_x_date(format = "%b-%Y")

我该怎么做才能完成这项工作?喜欢这个情节,但有月份: enter image description here

4 个答案:

答案 0 :(得分:1)

试试这个:

a2 <- read.table(text=' Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
                 2012 463829 469849 608148 470825 560057 431183 418000 508168 422579 589829 462264 487183
                 2013 612174 467904 454620 450243 549898 422026 508311 385633 420200 619074 462605 465353
                 2014 565804 464841 505977 624608 491175 459701 563406 461595 499607 674799 505167 637375
                 2015 500131 473494 488527 613972 468938 454034 566511 456879 592797 491368 481690 597927', header=TRUE)
library(ggplot2)
library(reshape2)
a2$year <- rownames(a2)
a2 <- melt(a2)
ggplot(a2, aes(variable, value, group=year)) + geom_line() + facet_wrap(~year, ncol=1)

带输出 enter image description here

或全部在一个地块中:

ggplot(a2, aes(variable, value, group=year, col=year)) + geom_line()

带输出 enter image description here

或者这个:

a2 <- read.table(text=' Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
2012 463829 469849 608148 470825 560057 431183 418000 508168 422579 589829 462264 487183
                 2013 612174 467904 454620 450243 549898 422026 508311 385633 420200 619074 462605 465353
                 2014 565804 464841 505977 624608 491175 459701 563406 461595 499607 674799 505167 637375
                 2015 500131 473494 488527 613972 468938 454034 566511 456879 592797 491368 481690 597927', header=TRUE)
a2$year <- rownames(a2)
a2 <- melt(a2, id='year')
a2$date <- as.Date(paste(a2$year, a2$variable, '01'), '%Y %b %d')
ggplot(a2, aes(date, value)) + geom_line() + 
  scale_x_date(date_breaks = "months", date_labels = "%b %Y") +
  theme(axis.text.x = element_text(angle = 90))

带输出 enter image description here

答案 1 :(得分:0)

在ggplot中测试此选项。

+scale_x_date(labels=date_format("%Y-%m")

答案 2 :(得分:0)

我认为问题在于您的时间序列索引是十进制日期(即数字)格式,scale_x_date期待日期格式的内容。

这是一些接近我想你想要的代码。它涉及首先使用日期格式创建一个zoo对象,然后绘制该对象。像:

a3 <- zoo(a2, order.by = as.Date(yearmon(index(a2))))
p <- autoplot(a3)
p + scale_x_date(date_breaks = "1 month")
  + theme(axis.text.x = element_text(angle = 90))

我认为你会想要修改scale_x_date中的选项以改善结果的外观,但我认为这应该让你走上正确的道路。

答案 3 :(得分:0)

请注意,a2的类不是"xts" - 它是"ts"类对象。无论如何,首先将索引转换为类"yearmon",然后像这样使用scale_x_yearmon

z <- as.zoo(a2)
index(z) <- as.yearmon(index(z))
autoplot(z) + scale_x_yearmon()