我正在制作一张非常宽的图表,当将其作为PNG文件输出时,它在x轴上占据了数千个像素;大约有20年的每日数据。 (这可能是也可能不是很好的做法,但这是供我自己使用,而不是发布。)由于统计图是如此之宽,因此当您滚动查看统计图时,y轴会从 View 中消失。因此,我想每隔2年向图上添加标签,以在y轴上显示值。生成的图表看起来像下面的图表,只是为了使图表紧凑,我只使用了30天的伪造数据,并大约每10天使用一次标签:
这或多或少地按要求工作,但是我想知道是否有更好的方法来处理它(如下面的图表所示)(请参见下面的代码)我在120、140和160的3个y轴值中都有一个列。实际数据具有更多级别,因此我将以15次对geom_text的调用结束,以将所有内容放置在绘图区域中。
问:是否有一种简单的方法可以将所有20多个日期(每个日期带有15个标签)一次喷洒到图表上?
require(ggplot2)
set.seed(12345)
mydf <- data.frame(mydate = seq(as.Date('2012-01-01'), as.Date('2012-01-31'), by = 'day'),
price = runif(31, min = 100, max = 200))
mytext <- data.frame(mydate = as.Date(c('2012-01-10', '2012-01-20')),
col1 = c(120, 120), col2 = c(140,140), col3 = c(160,160))
p <- ggplot(data = mydf) +
geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) +
geom_text(data = mytext, aes(x = mydate, y = col1, label = col1), size = 4) +
geom_text(data = mytext, aes(x = mydate, y = col2, label = col2), size = 4) +
geom_text(data = mytext, aes(x = mydate, y = col3, label = col3), size = 4)
print(p)
最佳答案
ggplot2喜欢数据为长格式,因此melt()
将文本转换为长格式可让您一次调用geom_text()
:
require(reshape2)
mytext.m <- melt(mytext, id.vars = "mydate")
然后,您的绘图命令变为:
ggplot(data = mydf) +
geom_line(aes(x = mydf$mydate, y = mydf$price), colour = 'red', size = 0.8) +
geom_text(data = mytext.m, aes(x = mydate, y = value, label = value), size = 4)
关于R:在ggplot中,如何在y轴上为x轴上的多个日期中的每个日期添加多个文本标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11492583/