R中一个图中的多个图
Multiple plots in one figure in R
我有三个地块,我想用下图显示它们
我做了几次尝试,但没有成功。我的代码如下:
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()
)
在我提供的 link 中,用更少的线条绘制了更好的图形。我的代码似乎有点复杂,坦率地说我无法退出。 a、b 和 c 在一个图像和一个日期轴上绘制。如何修改代码以获得示例结果?谢谢。
感谢您发布数据。如前所述,第一步是安排您的数据集,使其位于 Tidy Data format 中。 dat$PS.230
、dat$PS.286
和 dat$PS.389
中的信息应该用两列更好地表示:
第一列:数据类型名称 - 我们将此列称为dat$value_type
,它的值表明[=16] =] 来自 PS.230、PS.286 或 PS.389.
第二列:数据值 - 我们将此列称为dat$result
,它只显示值。这将是所有地块的 y=
美学。
预处理:收集成 TidyData 格式
使用 gather()
函数将所有列收集到一个键 ("value_type") 和一个 "value" ("result") 中。我们将收集除 "dates" 之外的所有列,因此我们只需注意通过 -dates
:
排除该列
dat <- dat %>% gather(key='value_type', value='result', -dates)
情节
对于情节,您将 x 和 y 美学应用于 "date" 和 "result"。您可以使用 "value_type" 根据颜色进行区分,并为点和线创建图例。您还使用 "value_type" 作为通过使用 facet_grid()
函数创建构面(三个单独的图)的列。请注意,value_type ~ .
垂直排列 "value_type",而 . ~ value_type
会水平排列:
ggplot(dat, aes(x=dates, y=result)) +
geom_line(aes(color=value_type)) +
geom_point(aes(color=value_type)) +
scale_x_date(date_breaks = '1 months', date_labels = '%Y-%m') +
facet_grid(value_type ~ .) +
theme_bw()
我有三个地块,我想用下图显示它们
我做了几次尝试,但没有成功。我的代码如下:
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()
)
在我提供的 link 中,用更少的线条绘制了更好的图形。我的代码似乎有点复杂,坦率地说我无法退出。 a、b 和 c 在一个图像和一个日期轴上绘制。如何修改代码以获得示例结果?谢谢。
感谢您发布数据。如前所述,第一步是安排您的数据集,使其位于 Tidy Data format 中。 dat$PS.230
、dat$PS.286
和 dat$PS.389
中的信息应该用两列更好地表示:
第一列:数据类型名称 - 我们将此列称为
dat$value_type
,它的值表明[=16] =] 来自 PS.230、PS.286 或 PS.389.第二列:数据值 - 我们将此列称为
dat$result
,它只显示值。这将是所有地块的y=
美学。
预处理:收集成 TidyData 格式
使用 gather()
函数将所有列收集到一个键 ("value_type") 和一个 "value" ("result") 中。我们将收集除 "dates" 之外的所有列,因此我们只需注意通过 -dates
:
dat <- dat %>% gather(key='value_type', value='result', -dates)
情节
对于情节,您将 x 和 y 美学应用于 "date" 和 "result"。您可以使用 "value_type" 根据颜色进行区分,并为点和线创建图例。您还使用 "value_type" 作为通过使用 facet_grid()
函数创建构面(三个单独的图)的列。请注意,value_type ~ .
垂直排列 "value_type",而 . ~ value_type
会水平排列:
ggplot(dat, aes(x=dates, y=result)) +
geom_line(aes(color=value_type)) +
geom_point(aes(color=value_type)) +
scale_x_date(date_breaks = '1 months', date_labels = '%Y-%m') +
facet_grid(value_type ~ .) +
theme_bw()