Eu escrevi este código R que faz um gráfico 3D em diferentes valores da variável p3.
Primeiro, defino todas as funções:
library(plotly)
library(dplyr)
calculate_b_values <- function(p1, p2, p3, weights) {
grid <- expand.grid(p1 = p1, p2 = p2)
grid$B <- (weights$w4 / weights$w2) * weights$w3 * grid$p1 * grid$p2 * p3
matrix(grid$B, nrow = length(p1), ncol = length(p2))
}
create_surface_plot <- function(p1, p2, z_matrix, p3_value) {
plot_ly() %>%
add_surface(
z = z_matrix,
x = p1,
y = p2,
colorscale = "Viridis",
opacity = 0.9
) %>%
layout(
scene = list(
xaxis = list(title = "p1"),
yaxis = list(title = "p2"),
zaxis = list(title = "B"),
aspectratio = list(x = 1, y = 1, z = 0.7)
),
title = paste("Surface Plot with p3 =", p3_value)
)
}
generate_surface_plots <- function(p_range = seq(0.1, 1, length.out = 20),
p3_values = c(0.1, 0.4, 0.7, 1.0),
weights = list(w1 = 10, w2 = 5, w3 = 3, w4 = 8)) {
plot_list <- list()
for (i in seq_along(p3_values)) {
p3_fixed <- p3_values[i]
z_matrix <- calculate_b_values(p_range, p_range, p3_fixed, weights)
plot_list[[i]] <- create_surface_plot(p_range, p_range, z_matrix, p3_fixed)
}
names(plot_list) <- paste0("p3_", p3_values)
return(plot_list)
}
Então, chamo as funções para fazer todos os 4 gráficos:
weights <- list(w1 = 10, w2 = 5, w3 = 3, w4 = 8)
p_vals <- seq(0.1, 1, length.out = 20)
p3_values <- c(0.1, 0.4, 0.7, 1.0)
plots <- generate_surface_plots(p_vals, p3_values, weights)
plots[[1]]
plots[[2]]
plots[[3]]
plots[[4]]
Quero exibir todos os 4 gráficos na mesma página . Isso parece poder ser feito usando o recurso subplot ( https://plotly.com/r/subplots/ ):
plots <- generate_surface_plots(p_vals, p3_values, weights)
combined_plot <- subplot(
plots[[1]], plots[[2]],
plots[[3]], plots[[4]],
nrows = 2,
titleX = TRUE,
titleY = TRUE,
margin = 0.05
)
combined_plot <- combined_plot %>%
layout(
title = list(
text = "Surface Plots at Different p3 Values",
font = list(size = 16)
)
)
combined_plot
Mas isso os coloca todos no mesmo terreno:
Como posso colocar todos os 4 gráficos separadamente na mesma página , por exemplo
- Uma referência Python ( https://plotly.com/python/3d-subplots/ ), gostaria de poder fazer isso em R
Você pode usar
htmltools
como solução alternativa. https://github.com/rstudio/htmltools