Estou trabalhando em um estudo de simulação em R, onde estou plotando curvas de viés e variância para diferentes estimadores. Quero que os títulos dos subplots incluam expressões matemáticas formatadas corretamente, especificamente \beta_0 e \beta_1, usando expression()
no main
argumento da plot()
função.
Aqui está a parte relevante do meu código para plotagem:
# Define plotting parameters
pch_values <- c(3, 4, 18, 20) # Symbols for different cases
colors <- c("red", "blue", "gray60") # Colors for different noises
plot_titles <- c("Bias Curves", "Variance Curves")
coeff_labels <- c(expression(beta[0]), expression(beta[1]))
par(mfrow = c(2, 2), mar = c(4, 4, 2, 1)) # 2x2 layout
for (plot_type in c("bias", "variance")) {
for (coef_idx in seq_along(coeff_labels)) {
coef_name <- ifelse(coef_idx == 1, "beta_0", "beta_1")
# Compute y-axis range
ylim_range <- range(sapply(results_coef, function(noise_list) {
sapply(noise_list, function(case_list) {
y_values <- abs(case_list[[plot_type]][[coef_name]]) # Absolute for bias
return(y_values)
})
}), na.rm = TRUE)
# Initialize the plot
plot(NULL, log = "x", xlim = range(sample_sizes), ylim = ylim_range,
xlab = "Sample Size (T)", ylab = str_to_title(plot_type),
main = paste(plot_titles[ifelse(plot_type == "bias", 1, 2)], " (", coeff_labels[coef_idx], ") ", sep = ""))
for (noise_idx in seq_along(noise_types)) {
noise <- noise_types[noise_idx]
case_counter <- 1
for (scale in unique(unlist(lapply(cases, `[[`, noise)))) {
y_values <- abs(results_coef[[noise]][[as.character(scale)]][[plot_type]][[coef_name]]) # Absolute for bias
lines(sample_sizes, y_values, col = colors[noise_idx], lty = noise_idx, lwd = 1)
points(sample_sizes, y_values, col = colors[noise_idx], pch = pch_values[case_counter])
case_counter <- case_counter + 1
}
}
# Add legends
legend("topright", legend = str_to_title(noise_types), col = colors,
lty = 1:length(noise_types), lwd = 1, bty = "n", inset = c(.2, 0))
legend("topright", legend = paste("Case", seq_along(pch_values)),
pch = pch_values, col = "black", bty = "n")
}
}
Entretanto, em vez de exibir as expressões matemáticas \beta_0 e \beta_1 nos títulos dos gráficos, o main
texto mostra beta[0]
e beta[1]
como texto simples.
Pergunta:
Como posso formatar corretamente os títulos dos gráficos para incluir texto (por exemplo, "Curvas de polarização") e expressões matemáticas no estilo LaTeX como \beta_0 e \beta_1 no main
argumento de plot()
?
Quaisquer sugestões ou abordagens alternativas seriam muito apreciadas.
Editar:
Aqui está um exemplo mínimo de trabalho:
# Define plotting parameters
coeff_labels <- c(expression(beta[0]), expression(beta[1]))
plot_titles <- c("Bias Curves", "Variance Curves")
# Attempting to plot with combined text and expressions
plot(NULL, xlim = c(1, 10), ylim = c(1, 10),
main = paste(plot_titles[1], " (", coeff_labels[1], ")", sep = ""))
Embora eu não tenha certeza se isso transmite corretamente o problema.
Suas
coeff_labels
variáveis são expressões que seriam formatadas corretamente por si mesmas, mas você as combina com strings usandoc()
, então tudo é convertido em strings e não funciona.Se você estivesse disposto a codificar os rótulos, seria fácil. Use
Então o que você precisa fazer é construir uma expressão como essa a partir de variáveis. Há muitas maneiras de fazer isso;
substitute
pode ser a mais fácil. Por exemplo,Pode ser mais fácil trabalhar com
grDevices:plotMath
. Citando,