library(plot3D)
-> df
trees
round(df, 0) -> df
names(df) <- c("DIAMETER", "HEIGHT", "VOLUME")
:::scatter3D(x = df$DIAMETER,
plot3Dy = df$HEIGHT,
z = df$VOLUME,
theta = 45)
Các lệnh vẽ đồ thị 3D trong R
Lưu ý: Quarto không render liên tiếp các code chunk được (khi vẽ plot theo kiểu add lần lượt point vào thì ta cần gộp toàn bộ trong 1 code chunk), vì vậy để thuận tiện xuất hình thì ta chạy trực tiếp trong RStudio qua từng code chunk. File HTML bạn đang xem được mình chèn lại từng plot tương ứng ở mỗi step, code chunk đã được set
eval = FALSE
để giữ nguyên đoạn code (không chạy code) giúp bạn dễ hình dung workflow vẽ hình 3D.
1 Package plot3D
1.1 Vẽ theo kiểu mặc định
1.2 Vẽ chi tiết
:::scatter3D(x = df$DIAMETER,
plot3Dy = df$VOLUME,
z = rep(0, nrow(df)),
theta = 65,
phi = 20,
colkey = FALSE,
xlim = c(0, 30),
ylim = c(0, 100),
zlim = c(0, 0.5))
<- lm(VOLUME ~ DIAMETER, data = df)
fit_xy
coef(fit_xy)
###
:::points3D(x = min(df$DIAMETER),
plot3Dy = coef(fit_xy)[1] + coef(fit_xy)[2]*min(df$DIAMETER),
z = 0,
col = "red",
cex = 1,
add = TRUE,
pch = 19)
:::points3D(x = max(df$DIAMETER),
plot3Dy = coef(fit_xy)[1] + coef(fit_xy)[2]*max(df$DIAMETER),
z = 0,
col = "red",
cex = 1,
add = TRUE,
pch = 19)
###
:::segments3D(x0 = min(df$DIAMETER),
plot3Dy0 = coef(fit_xy)[1] + coef(fit_xy)[2]*min(df$DIAMETER),
x1 = max(df$DIAMETER),
y1 = coef(fit_xy)[1] + coef(fit_xy)[2]*max(df$DIAMETER),
z0 = 0,
z1 = 0,
lwd = 2,
col = "red",
add = TRUE,
colkey = FALSE)
###
:::segments3D(x0 = min(df$DIAMETER),
plot3Dy0 = 0,
x1 = min(df$DIAMETER),
y1 = 100,
z0 = 0,
z1 = 0,
lwd = 1,
col = "blue",
add = TRUE,
colkey = FALSE)
:::segments3D(x0 = max(df$DIAMETER),
plot3Dy0 = 0,
x1 = max(df$DIAMETER),
y1 = 100,
z0 = 0,
z1 = 0,
lwd = 1,
col = "blue",
add = TRUE,
colkey = FALSE)
1.2.1 Thêm các điểm dữ liệu
:::points3D(x = df$DIAMETER[df$DIAMETER == 11],
plot3Dy = df$VOLUME[df$DIAMETER == 11],
z = rep(0, length(df$DIAMETER[df$DIAMETER == 11])),
col = "blue",
cex = 1,
add = TRUE,
pch = 19)
:::points3D(x = df$DIAMETER[df$DIAMETER == 14],
plot3Dy = df$VOLUME[df$DIAMETER == 14],
z = rep(0, length(df$DIAMETER[df$DIAMETER == 14])),
col = "blue",
cex = 1,
add = TRUE,
pch = 19)
:::points3D(x = df$DIAMETER[df$DIAMETER == 18],
plot3Dy = df$VOLUME[df$DIAMETER == 18],
z = rep(0, length(df$DIAMETER[df$DIAMETER == 18])),
col = "blue",
cex = 1,
add = TRUE,
pch = 19)
1.2.2 Thêm đường density
# d_11 <- hist(df$VOLUME[df$DIAMETER == 11], probability = TRUE)
# lines(density(df$VOLUME[df$DIAMETER == 11]))
<- df$VOLUME[df$DIAMETER == 11]
v_11
<- seq(from = min(v_11, na.rm = TRUE)-10,
day_so to = max(v_11, na.rm = TRUE)+10,
length = 1000)
# curve(expr = dnorm(day_so,
# mean = mean(v_11, na.rm = TRUE),
# sd = sd(v_11, na.rm = TRUE)),
# type = "l",
# add = TRUE,
# lwd = 2,
# xname = "day_so",
# col = "blue",
# lty = "dotted")
<- dnorm(day_so,
density_y_11 mean = mean(v_11, na.rm = TRUE),
sd = sd(v_11, na.rm = TRUE))
:::segments3D(x0 = 11,
plot3Dy0 = 0,
x1 = 11,
y1 = 100,
z0 = 0,
z1 = 0,
lwd = 1,
col = "blue",
add = TRUE,
colkey = FALSE)
:::segments3D(x0 = 0,
plot3Dy0 = 16,
x1 = 30,
y1 = 16,
z0 = 0,
z1 = 0,
lwd = 1,
col = "blue",
add = TRUE,
colkey = FALSE)
:::points3D(x = rep(11, times = 1000),
plot3Dy = day_so,
z = density_y_11,
col = "blue",
cex = 1,
add = TRUE,
pch = 19,
type = "l")