Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R:在ggplot中,如何在y轴上为x轴上的每个日期添加多个文本标签_R_Ggplot2 - Fatal编程技术网

R:在ggplot中,如何在y轴上为x轴上的每个日期添加多个文本标签

R:在ggplot中,如何在y轴上为x轴上的每个日期添加多个文本标签,r,ggplot2,R,Ggplot2,我正在制作一个非常宽的图表,当输出为PNG文件时,它在x轴上占据数千像素;有大约20年的每日数据。(这可能被认为是好的做法,也可能不被认为是好的做法,但这是我自己使用的,不是发布的。)因为图表太宽,当你滚动图表时,y轴从视图中消失。因此,我希望每隔2年向绘图添加标签,以显示y轴上的值。生成的图表如下所示,只是为了保持简洁,我只使用了30天的假数据,并且大约每10天贴一次标签: 这或多或少符合要求,但我想知道是否有更好的方法来实现这一点,因为在这张图表中(见下面的代码),我为3个y轴值120、1

我正在制作一个非常宽的图表,当输出为PNG文件时,它在x轴上占据数千像素;有大约20年的每日数据。(这可能被认为是好的做法,也可能不被认为是好的做法,但这是我自己使用的,不是发布的。)因为图表太宽,当你滚动图表时,y轴从视图中消失。因此,我希望每隔2年向绘图添加标签,以显示y轴上的值。生成的图表如下所示,只是为了保持简洁,我只使用了30天的假数据,并且大约每10天贴一次标签:

这或多或少符合要求,但我想知道是否有更好的方法来实现这一点,因为在这张图表中(见下面的代码),我为3个y轴值120、140和160各有一列。真实的数据有更多的级别,所以我会调用15次geom_text,将所有内容都放在绘图区域

Q.是否有一种更简单的方法将所有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)
require(ggplot2)
种子集(12345)

mydfggplot2喜欢长格式的数据,因此
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)