www.tuhocr.comTimeseries là đồ thị chuỗi thời gian. Các bạn tham khảo kết quả phân tích mẫu nước để hiểu cách vẽ đồ thị này nhé.
options(width = 200)
library(readxl)
data_1 <- read_excel("test_1.xlsx",
sheet = "Water Quality",
range = "AZ7:BF50")
data_1 <- as.data.frame(data_1)
sapply(data_1, class)## $day
## [1] "POSIXct" "POSIXt"
##
## $pH
## [1] "numeric"
##
## $total_ammonia_nitrogen
## [1] "numeric"
##
## $nitrite
## [1] "numeric"
##
## $dissolved_oxygen
## [1] "numeric"
##
## $temperature
## [1] "numeric"
##
## $salinity
## [1] "numeric"
data_1## day pH total_ammonia_nitrogen nitrite dissolved_oxygen temperature salinity
## 1 2022-08-11 6.483601 0.05998792 0.00000000 7.115938 33.93516 9.527480
## 2 2022-08-12 9.735767 NA NA 7.006581 31.32774 8.364751
## 3 2022-08-13 8.634653 NA NA 6.848394 39.67200 6.348649
## 4 2022-08-14 9.373907 0.20896914 0.06486626 9.921044 38.87469 8.671763
## 5 2022-08-15 8.235977 NA NA 8.689734 30.73168 7.471763
## 6 2022-08-16 7.922731 NA NA 9.021819 37.08597 6.274478
## 7 2022-08-17 NA NA NA 8.123651 34.61852 6.657327
## 8 2022-08-18 7.810531 0.17121826 0.24949588 7.105878 34.06103 8.884701
## 9 2022-08-19 9.349299 NA NA 7.274762 36.67722 6.319860
## 10 2022-08-20 9.913328 NA NA 9.561454 39.41573 9.057417
## 11 2022-08-21 8.919318 0.23649883 0.12000000 6.508541 39.77721 6.309944
## 12 2022-08-22 9.442101 NA NA 6.728421 39.34810 8.559745
## 13 2022-08-23 6.495703 NA NA 7.558905 31.77676 9.594214
## 14 2022-08-24 NA NA NA 7.550808 32.60600 7.482738
## 15 2022-08-25 NA 0.10833932 0.22577448 9.123366 31.87764 8.928095
## 16 2022-08-26 8.031496 NA NA 7.141884 35.72586 7.187219
## 17 2022-08-27 8.707216 NA NA 8.374158 37.82242 8.490954
## 18 2022-08-28 9.355425 0.15472560 0.08000000 9.291177 37.87837 6.111254
## 19 2022-08-29 7.796455 NA NA 9.296595 32.16546 8.786137
## 20 2022-08-30 NA NA NA 7.668259 39.20593 7.494812
## 21 2022-08-31 NA NA NA 8.980902 34.88181 7.343026
## 22 2022-09-01 7.823394 0.08222836 0.24884540 9.561228 37.13762 6.325238
## 23 2022-09-02 7.009612 NA NA 8.022073 32.44701 8.120396
## 24 2022-09-03 8.080000 NA NA 9.341224 31.79005 8.245495
## 25 2022-09-04 NA 0.00000000 0.19000000 8.370304 39.42649 6.460634
## 26 2022-09-05 8.614674 NA NA 9.954012 39.61962 9.344707
## 27 2022-09-06 7.680043 NA NA 6.042928 33.91563 9.207883
## 28 2022-09-07 NA NA NA 7.760082 39.77862 9.108411
## 29 2022-09-08 6.002886 0.00000000 0.22697945 8.899884 38.48310 7.813860
## 30 2022-09-09 8.594872 NA NA 9.725894 38.65799 6.980183
## 31 2022-09-10 NA NA NA 9.253289 38.55731 8.592848
## 32 2022-09-11 NA 0.17302148 0.17500000 8.424449 37.40832 7.673065
## 33 2022-09-12 9.983757 NA NA 8.454844 30.25309 8.857115
## 34 2022-09-13 NA NA NA 9.711735 31.74760 7.470784
## 35 2022-09-14 NA NA NA 8.399588 36.41311 8.590657
## 36 2022-09-15 NA 0.20546269 0.17524820 9.763491 38.41826 6.949832
## 37 2022-09-16 NA NA NA 6.658635 34.38066 6.290941
## 38 2022-09-17 NA NA NA 6.654338 36.91343 7.619416
## 39 2022-09-18 NA 0.07000000 0.11500000 7.787158 36.26957 6.897467
## 40 2022-09-19 7.940000 NA NA 7.207710 36.68730 6.945568
## 41 2022-09-20 NA NA NA 9.597726 38.67047 8.385105
## 42 2022-09-21 NA NA NA 7.404706 38.38850 9.807404
## 43 2022-09-22 NA 0.00000000 0.08300000 7.037988 33.22073 9.006370
# data_1$day <- 1:dim(data_1)[1]
oldpar <- par(no.readonly=TRUE)
par(mfrow = c(6, 1), mar = c(2.2, 3, 2.5, 1), cex = 0.8)
plot(pH ~ day,
na.omit(data_1[, c("pH", "day")]),
type = "l", col = 2, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$pH, na.rm = TRUE)*0.8, max(data_1$pH, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "pH", line = 3.5)
title(main = "pH", line = 0.5, cex.main = 0.9)
plot(total_ammonia_nitrogen ~ day,
na.omit(data_1[, c("total_ammonia_nitrogen", "day")]),
type = "l", col = 3, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$total_ammonia_nitrogen, na.rm = TRUE)*0.8, max(data_1$total_ammonia_nitrogen, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "Total ammonia nitrogen (ppm)", line = 3.5)
title(main = "Total ammonia nitrogen (ppm)", line = 0.5, cex.main = 0.9)
plot(nitrite ~ day,
na.omit(data_1[, c("nitrite", "day")]),
type = "l", col = 4, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$nitrite, na.rm = TRUE)*0.8, max(data_1$nitrite, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "Total ammonia nitrogen (ppm)", line = 3.5)
title(main = "Nitrite (ppm)", line = 0.5, cex.main = 0.9)
plot(dissolved_oxygen ~ day,
na.omit(data_1[, c("dissolved_oxygen", "day")]),
type = "l", col = 5, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$dissolved_oxygen, na.rm = TRUE)*0.8, max(data_1$dissolved_oxygen, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "Total ammonia nitrogen (ppm)", line = 3.5)
title(main = "Dissolved oxygen (ppm)", line = 0.5, cex.main = 0.9)
plot(temperature ~ day,
na.omit(data_1[, c("temperature", "day")]),
type = "l", col = 6, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$temperature, na.rm = TRUE)*0.8, max(data_1$temperature, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "Total ammonia nitrogen (ppm)", line = 3.5)
title(main = "Temperature (°C)", line = 0.5, cex.main = 0.9)
plot(salinity ~ day,
na.omit(data_1[, c("salinity", "day")]),
type = "l", col = 7, las = 1, lwd = 2,
xaxs = "i", yaxs = "i",
ylim = c(min(data_1$salinity, na.rm = TRUE)*0.8, max(data_1$salinity, na.rm = TRUE)*1.2),
xlim = c(data_1$day[1], data_1$day[length(data_1$day)]),
xlab = "", ylab = "",
main = ""
)
# title(xlab = "Ngày", line = 2)
# title(ylab = "Total ammonia nitrogen (ppm)", line = 3.5)
title(main = "Salinity (ppt)", line = 0.5, cex.main = 0.9)
# Tạo tiêu đề chung cho 2 đồ thị
mtext("Số liệu phân tích nước | Đợt 1 | 2022",
side = 3,
line = -1.2,
outer = TRUE
)par(oldpar)lattice
packagelibrary(zoo)
library(lattice)
z <- read.zoo(data_1, FUN = identity)
xyplot(na.approx(z),
type = "l", col = "#01d086", lwd = 2, xlab = "",
main = "Số liệu phân tích nước | Đợt 1 | 2022",
strip = strip.custom(factor.levels = c(
"pH",
"Total ammonia nitrogen (ppm)",
"Nitrite (ppm)",
"Dissolved oxygen (ppm)",
"Temperature (°C)",
"Salinity (ppt)"
)),
par.settings = list(strip.background = list(col = "#fcf186")),
scales = list(y = list(tick.number = 3))
)Trên đây là hướng dẫn vẽ đồ thị timeseries trong R. Để học R bài bản từ A đến Z, thân mời Bạn tham gia khóa học “HDSD R để xử lý dữ liệu” để có nền tảng vững chắc về R nhằm tự tay làm các câu chuyện dữ liệu của riêng mình!
ĐĂNG KÝ NGAY:
https://www.tuhocr.com/register
Hướng dẫn cài đặt package tuhocr
https://tuhocr.github.io/