【发布时间】:2020-11-04 18:42:43
【问题描述】:
我想在 x 轴上制作一个仅包含日期变量值的折线图,但 ggplot 正在绘制所有值,这些值正在填充我的数据中的缺失值,这是我不想要的。
这是我数据的一部分:
f <- structure(list(o = c(
"2020-01-02", "2020-01-03", "2020-01-06",
"2020-01-07", "2020-01-08", "2020-01-09", "2020-01-10", "2020-01-13",
"2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-01-21",
"2020-01-22", "2020-01-23", "2020-01-24", "2020-01-27", "2020-01-28",
"2020-01-29", "2020-01-30"
), val = c(
72.83, 75.56, 75.55, 75.98,
74.84, 77.17, 79.75, 83.72, 84.61, 85.8, 85.89, 83.63, 87.75,
91.81, 95.06, 100.79, 103.21, 106.62, 99.29, 93.55
), i.hold = c(
0L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L, 1L, 1L
), equity.val = c(
72.83, 72.83, 72.83, 72.83, 72.83,
72.83, 72.83, 72.83, 72.83, 73.85432, 73.93179, 71.98644, 75.53283,
79.02756, 81.82508, 86.75731, 88.84038, 91.77562, 85.46615, 80.52531
), ma_5 = c(
NA, NA, NA, NA, 74.952, 75.82, 76.658, 78.292, 80.018,
82.21, 83.954, 84.73, 85.536, 86.976, 88.828, 91.808, 95.724,
99.498, 100.994, 100.692
), ma_10 = c(
NA, NA, NA, NA, NA, NA,
NA, NA, NA, 78.581, 79.887, 80.694, 81.914, 83.497, 85.519, 87.881,
90.227, 92.517, 93.985, 94.76
)), row.names = c(NA, -20L), class = "data.frame")
NA 值不是问题。所以,o 是我的日期变量,我想在 5 个日期后在 x 轴上绘制主要中断(x 轴上的网格线)。例如,第一次休息在 2020 年 1 月 2 日,第二次在 2020 年 1 月 9 日,第三次在 2020 年 1 月 16 日,第四次在 2020 年 1 月 24 日等等。我还希望数据中的每个日期都有小中断(x 轴上的网格线)。 你可以在这里找到数据集 - https://drive.google.com/file/d/1bvys_S4ZoyYBXaD4lXdAtY0GO88mWL79/view?usp=sharing
这是我的代码-
ggplot(f, aes(x = o, y = val)) +
geom_line(colour = "blue", lwd = 1) +
geom_segment(aes(y = -Inf, yend = Inf, x = f$o, xend = f$o, alpha = f$i.hold),
inherit.aes = F, colour = "black", size = 5) +
scale_alpha_continuous(range = c(0, 0.15)) +
guides(alpha = F) +
geom_line(aes(y = ma_10), colour = "green", lwd = 1) +
geom_line(aes(y = ma_5), colour = "red", lwd = 1) +
geom_line(aes(y = equity.val), lwd = 1) +
theme_bw() +
labs(x = "Dates", y = "Price") +
ggtitle("TXG") +
theme(plot.title = element_text(hjust = 0.5),
axis.text.x = element_text(angle = 90),
panel.grid.major.x = element_line(colour = "black", size = 0.6),
panel.grid.minor.x = element_line(colour = "black", size = 0.3)) +
scale_x_date(breaks = seq(as.Date(f$o[1]), as.Date(f$o[length(f$o)]), by = 5),
minor_breaks = seq(as.Date(f$o[1]), as.Date(f$o[length(f$o)]), by = 1),
date_labels = "%Y-%m-%d")
所以我的代码发生了什么,gg-plot 显示连续日期,即使是那些不在数据中的日期。 这是我的结果的图像-
我只想要我的日期变量中的那些。我不想在我的情节中有任何额外的日期。我想要格式为 YYYY-MM-DD 的日期。
我在这里尝试了答案-Breaks for scale_x_date in ggplot2 and R,但在我的情况下它不起作用。 任何其他答案将不胜感激。提前谢谢你。
【问题讨论】:
-
嗨,OP。欢迎来到 SO!你能通过
dput(f)分享你的数据集吗?该函数的输出应以structure(...开头,并且可以直接复制并粘贴到您的问题(格式为代码)中,以代替您发布的文本,这些文本不容易复制。如果数据集太大,您还可以复制并粘贴dput(head(f, 10))或类似内容的输出。另外,你可以张贴你的情节图片而不是分享谷歌驱动器链接吗? (不能总是访问) -
嗨,欢迎来到 SO。使用提供的链接线程解决方案到底有什么不起作用?对我来说似乎很有帮助,或多或少是相同的问题。
-
这能回答你的问题吗? Breaks for scale_x_date in ggplot2 and R [这是一条自动评论,因为我将此问题标记为重复问题]
-
嗨,@chemdork123 我已经为代码添加了输出图像。数据只有 108 行。我为数据集添加了一个活动链接,您可以在其中访问数据集。您可以将我的输入文件读取为 CSV 并将其放入我的代码中以获取输出。
-
嗨@Tjebo 我收到此错误 - as.Date.numeric(value) 中的错误:必须提供“原点”。我的日期变量是日期类型,并且出现此错误。
标签: r ggplot2 time-series line-plot