【发布时间】:2020-05-07 12:25:15
【问题描述】:
我有三个图,我想用如下图显示它们
我做了几次尝试,但没有成功。我的代码如下:
dat <- read.table(text="
dates PS.230 PS.286 PS.389
3.01.2018 20.75103 16.69312 -6.503637
15.01.2018 15.00284 16.03211 16.1058
8.02.2018 11.0789 7.438522 -2.970704
20.02.2018 15.10865 12.8969 3.935687
4.03.2018 24.74799 19.25148 9.186779
28.03.2018 -1.299456 7.028817 -8.126284
9.04.2018 4.778902 8.309322 -3.450085
21.04.2018 7.131915 9.484932 -4.326919
", header=T, stringsAsFactors=FALSE)
dat$dates <- as.Date(dat$dates, "%d.%m.%Y")
library(ggplot2)
library(tidyverse)
a <- ggplot(dat, aes(x=dates, y=PS.230)) +
geom_point() +
geom_line() +
geom_smooth(se = FALSE, method = lm, size = 0.15, color = "#da0018") + #cizgi eklemek icin
scale_x_date(date_breaks = "1 months",date_labels = "%Y-%m",
limits = as.Date.character(c("01/12/2017","31/12/2018"),
format = "%d/%m/%Y")) +
ylim(-20,40) +
ylab("[mm/year]") +
xlab("") +
theme_linedraw() #theme_light
a + theme(
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank()
)
b <- ggplot(dat, aes(x=dates, y=PS.286)) +
geom_point() +
geom_line() +
geom_smooth(se = FALSE, method = lm, size = 0.15, color = "#da0018") + #cizgi eklemek icin
scale_x_date(date_breaks = "1 months",date_labels = "%Y-%m",
limits = as.Date.character(c("01/12/2017","31/12/2018"),
format = "%d/%m/%Y")) +
ylim(-20,40) +
ylab("[mm/year]") +
xlab("") +
theme_linedraw() #theme_light
b + theme(
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank()
)
c <- ggplot(dat, aes(x=dates, y=PS.389)) +
geom_point() +
geom_line() +
geom_smooth(se = FALSE, method = lm, size = 0.15, color = "#da0018") + #cizgi eklemek icin
scale_x_date(date_breaks = "1 months",date_labels = "%Y-%m",
limits = as.Date.character(c("01/12/2017","31/12/2018"),
format = "%d/%m/%Y")) +
ylim(-20,40) +
ylab("[mm/year]") +
xlab("") +
theme_linedraw() #theme_light
c + theme(
axis.text.x = element_text(angle = 45, hjust = 1),
panel.grid.major.x = element_blank(),
panel.grid.minor.x = element_blank()
)
在我提供的链接中,用更少的线条绘制了更好的图形。我的代码似乎有点复杂,坦率地说我无法脱身。 a、b 和 c 绘制在一张图像中,并且只有一个日期轴。如何修改代码以实现示例结果?谢谢。
【问题讨论】:
-
你能在这里分享你的数据框吗?为此,请发布
dput(dat)的输出。从它的外观来看,你有“宽”数据,它应该是整齐的格式。换句话说,dat$PS.230、dat$PS.286和dat$389应该被聚集到列中:一个键和一个值。这可以通过dplyr中的gather()函数来完成。然后您可以使用x=dates和y=value进行绘图,并使用face_grid()构建多重绘图。如果你分享你的数据,我可以帮忙写一些代码。 -
*抱歉 - 那是
facet_grid(),不是face_grid()! -
谢谢@chemdork123。我运行了 dput(dat) 命令,输出为:justpaste.it/3fwsf
-
我有话要说清楚。例如,图表中有 3 个数据。但我想在图表中显示 1 条数据。也就是第一张图只有ps230,第二张图是ps286,第三张图只有ps389。我认为当我看这个图时更容易理解。 ibb.co/rdL1fZK