减少ggplot2中滴答之间的空间

时间:2016-05-21 19:27:29

标签: r ggplot2

我制作了几个随机漫步的时间序列图,现在我了解如何提取它的某个部分以及如何将刻度从几年改为几个月。但即使经过长时间的测试,我也无法正确操作图表中的x轴。

现在,它显示了50年的步骤,并且只标记了每隔一条白色垂直网格线(为什么?在每个教程中,我都会看到所有线都被贴上标签)。我想要实现的是改变缩放比例,因此水平使用的空间更少(即减少x轴上所有刻度之间的空间),因此第一个刻度将是2000,第二个(不是第三个)目前的情况)在2050年,等等。我认为这应该可以用breaks以某种方式实现,但我无法弄明白。最后,情节在左侧和右侧开始和结束太早,但我相信我可以处理它。

这是情节:

set.seed(21)

n <- 2500
x <- matrix(replicate(20,cumsum(sample(c(-1, 1), n, TRUE))),nrow = 2500,ncol=20)

aa <- x

rnames <- seq(as.Date("2010-01-01"), length=dim(aa)[1], by="1 month") - 1
rownames(aa) <- format(as.POSIXlt(rnames, format = "%Y-%m-%d"), format = "%d.%m.%Y")
colnames(aa) <- paste0("aa",1:k)

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

aa <- melt(aa, id.vars = rownames(aa))
names(aa) <- c("time","id","value")

aa$time <- as.Date(aa$time, "%d.%m.%Y")

ggplot(aa, aes(x=time,y=value,colour=id,group=id)) + 
  geom_line()  

1 个答案:

答案 0 :(得分:4)

默认情况下,ggplot在每个主要网格线之间添加一个次要网格线(即,没有刻度线或刻度标签的网格线)。要仅包含主要网格线,请添加scale_x_date(minor_breaks=NULL)。 (如果您在观看的教程视频中没有看到较小的网格线,我的猜测是它们在那里,但由于分辨率不足和/或视频图像尺寸小而难以或无法看到。)

要缩小刻度线之间的物理距离,您需要更改绘图的纵横比。例如,如果你想要绘图的垂直范围,比如3“,那么你需要缩小水平范围,直到刻度标记之间的距离足够小。首先,让我们创建一个图:

ggplot(aa, aes(x=time,y=value,colour=id,group=id)) + 
  geom_line(show.legend=FALSE) +
  scale_x_date(minor_breaks=NULL) 

以下是渲染图的两个例子:

enter image description here

更新:要回答评论:对于上面的图,我使用grid.arrange创建了绘图布局,然后将其保存为来自RStudio绘图窗口的png。我使用widths参数使一个图比另一个更薄。

library(gridExtra)
grid.arrange(p1, p1, widths=c(0.6,0.4), ncol=2)

但是,您可以通过多种不同方式精确调整大小,具体取决于您所需的格式。例如:

# PNG format
png("wide.png", 500,500)
p1
dev.off()

png("narrow.png", 300,500)
p1
dev.off()

# PDF format
pdf("wide.pdf", 5, 5)
p1
dev.off()

pdf("narrow.pdf", 3, 5)
p1
dev.off()