Introducción

Este documento contiene el código en lenguaje R utilizado para generar la figura de análisis visual de indicadores críticos de la cadena cárnica bovina, presentada en la sección 4.6 del trabajo principal del Grupo 4.

1. Carga de librerías

# Si es la primera vez, instalar paquetes (descomentar la línea siguiente):
# install.packages(c("ggplot2", "dplyr", "tidyr", "patchwork", "ggrepel", "scales"))

library(ggplot2)
library(dplyr)
library(tidyr)
library(patchwork)
library(ggrepel)
library(scales)

2. Construcción de los datasets

Los datos provienen de la revisión bibliográfica desarrollada en el trabajo principal: Castaño-Sánchez et al. (2023), Dick et al. (2021) y FEDEGAN (2006).

# Dataset ambiental: huella de carbono vs huella hídrica azul
datos_ambientales <- data.frame(
  Sistema = c("Finalización en grano\n(EE.UU. - Texas)",
              "Finalización pastoril\n(Llanuras del Norte)",
              "Finalización pastoril\n(Suroeste EE.UU.)",
              "Promedio Brasil\n(LCA, 4 biomas)"),
  CO2_eq = c(17.2, 19.5, 24.4, 13.3),
  Agua_Azul = c(1976, 476, 1019, 193)
)

# Verificar contenido
datos_ambientales
##                                       Sistema CO2_eq Agua_Azul
## 1     Finalización en grano\n(EE.UU. - Texas)   17.2      1976
## 2 Finalización pastoril\n(Llanuras del Norte)   19.5       476
## 3    Finalización pastoril\n(Suroeste EE.UU.)   24.4      1019
## 4            Promedio Brasil\n(LCA, 4 biomas)   13.3       193
# Dataset productivo: Colombia vs referentes internacionales
datos_productividad <- data.frame(
  Indicador = c("Tasa de natalidad (%)",
                "Edad al sacrificio (meses)",
                "Rendimiento en canal (%)"),
  Colombia = c(53, 39, 51),
  `EE.UU. (intensivo)` = c(93, 23, 60),
  Brasil = c(60, 43, 50),
  check.names = FALSE
) %>%
  pivot_longer(cols = -Indicador, names_to = "Region", values_to = "Valor") %>%
  mutate(
    Indicador = factor(Indicador, levels = c("Tasa de natalidad (%)",
                                             "Edad al sacrificio (meses)",
                                             "Rendimiento en canal (%)")),
    Region = factor(Region, levels = c("Colombia", "Brasil", "EE.UU. (intensivo)"))
  )

# Verificar contenido
datos_productividad
## # A tibble: 9 × 3
##   Indicador                  Region             Valor
##   <fct>                      <fct>              <dbl>
## 1 Tasa de natalidad (%)      Colombia              53
## 2 Tasa de natalidad (%)      EE.UU. (intensivo)    93
## 3 Tasa de natalidad (%)      Brasil                60
## 4 Edad al sacrificio (meses) Colombia              39
## 5 Edad al sacrificio (meses) EE.UU. (intensivo)    23
## 6 Edad al sacrificio (meses) Brasil                43
## 7 Rendimiento en canal (%)   Colombia              51
## 8 Rendimiento en canal (%)   EE.UU. (intensivo)    60
## 9 Rendimiento en canal (%)   Brasil                50

3. Definición del tema visual y paletas

# Tema unificado para ambos paneles
tema_academico <- theme_minimal(base_size = 12, base_family = "sans") +
  theme(
    plot.title = element_text(face = "bold", size = 14, color = "#1a1a1a",
                              margin = margin(b = 4)),
    plot.subtitle = element_text(size = 10.5, color = "#4a4a4a",
                                 margin = margin(b = 12)),
    plot.caption = element_text(size = 9, color = "#6a6a6a",
                                hjust = 0, margin = margin(t = 10),
                                face = "italic"),
    axis.title = element_text(face = "bold", size = 11, color = "#2a2a2a"),
    axis.title.x = element_text(margin = margin(t = 8)),
    axis.title.y = element_text(margin = margin(r = 8)),
    axis.text = element_text(size = 10, color = "#3a3a3a"),
    panel.grid.major = element_line(color = "#e8e8e8", linewidth = 0.4),
    panel.grid.minor = element_blank(),
    legend.title = element_text(face = "bold", size = 10),
    legend.text = element_text(size = 9.5),
    legend.position = "bottom",
    plot.background = element_rect(fill = "white", color = NA),
    panel.background = element_rect(fill = "white", color = NA),
    plot.margin = margin(15, 15, 15, 15)
  )

# Paleta institucional académica
paleta_ambiental <- c("#8B4513", "#5B8A3A", "#2E8B57", "#1F6F4A")
paleta_productiva <- c("Colombia" = "#C0392B",
                       "Brasil" = "#27AE60",
                       "EE.UU. (intensivo)" = "#2874A6")

4. Panel A: Paradoja del trade-off ambiental

p1 <- ggplot(datos_ambientales,
             aes(x = CO2_eq, y = Agua_Azul, color = Sistema)) +
  # Sombreado de "zona deseable"
  annotate("rect", xmin = -Inf, xmax = 15, ymin = -Inf, ymax = 400,
           fill = "#5B8A3A", alpha = 0.08) +
  annotate("text", x = 13.3, y = 350, label = "Zona deseable\n(menor impacto)",
           color = "#5B8A3A", size = 3.2, fontface = "italic", hjust = 0.5) +
  geom_point(aes(size = CO2_eq), alpha = 0.85) +
  geom_text_repel(aes(label = Sistema),
                  size = 3.3, fontface = "bold",
                  box.padding = 0.8, point.padding = 0.5,
                  segment.color = "#999999", segment.size = 0.4,
                  min.segment.length = 0,
                  max.overlaps = Inf) +
  scale_color_manual(values = paleta_ambiental) +
  scale_size_continuous(range = c(6, 14)) +
  scale_x_continuous(limits = c(10, 27), breaks = seq(10, 26, by = 2)) +
  scale_y_continuous(labels = comma_format(big.mark = ".", decimal.mark = ","),
                     limits = c(0, 2200)) +
  labs(
    title = "Panel a. Paradoja de la eficiencia ambiental",
    subtitle = "Huella de carbono vs. huella hídrica azul en sistemas de producción de carne bovina",
    x = expression(bold("Huella de carbono ") * "(kg CO"[2]*"eq / kg canal)"),
    y = "Huella hídrica azul (L / kg canal)",
    caption = "Fuente: elaboración propia con datos de Castaño-Sánchez et al. (2023) y Dick et al. (2021).\nMenor valor en ambos ejes indica menor impacto ambiental."
  ) +
  tema_academico +
  theme(legend.position = "none")

p1

5. Panel B: Brechas productivas Colombia vs referentes

p2 <- ggplot(datos_productividad,
             aes(x = Indicador, y = Valor, fill = Region)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.78),
           width = 0.7, color = "white", linewidth = 0.3) +
  geom_text(aes(label = Valor),
            position = position_dodge(width = 0.78),
            vjust = -0.6, size = 3.5, fontface = "bold", color = "#2a2a2a") +
  scale_fill_manual(values = paleta_productiva, name = "País / sistema:") +
  scale_y_continuous(limits = c(0, 110), breaks = seq(0, 100, by = 20),
                     expand = expansion(mult = c(0, 0.05))) +
  labs(
    title = "Panel b. Brechas productivas: Colombia frente a referentes internacionales",
    subtitle = "Comparación de tres indicadores zootécnicos clave",
    x = NULL,
    y = "Valor del indicador",
    caption = "Fuente: elaboración propia con datos de FEDEGAN (2006), Castaño-Sánchez et al. (2023) y Dick et al. (2021).\nValores más altos son favorables en natalidad y rendimiento en canal; más bajos son favorables en edad al sacrificio."
  ) +
  tema_academico

p2

6. Figura final compuesta

figura_final <- (p1 / p2) +
  plot_annotation(
    title = "Figura 1. Análisis visual de indicadores críticos de la cadena cárnica bovina",
    subtitle = "Tensiones ambientales y brechas productivas identificadas en la revisión bibliográfica",
    caption = "Grupo 4 — Atributos de la cadena de carne e indicadores asociados a sostenibilidad",
    theme = theme(
      plot.title = element_text(face = "bold", size = 16, color = "#1a1a1a",
                                hjust = 0, margin = margin(b = 4)),
      plot.subtitle = element_text(size = 11, color = "#4a4a4a",
                                   hjust = 0, margin = margin(b = 10)),
      plot.caption = element_text(size = 9, color = "#6a6a6a",
                                  hjust = 1, face = "italic",
                                  margin = margin(t = 10)),
      plot.background = element_rect(fill = "white", color = NA),
      plot.margin = margin(20, 20, 20, 20)
    )
  ) +
  plot_layout(heights = c(1, 0.9))

figura_final

7. Exportación a PNG de alta resolución

ggsave(
  filename = "figura_indicadores_criticos.png",
  plot = figura_final,
  width = 11,
  height = 11,
  units = "in",
  dpi = 300,
  bg = "white"
)

cat("✅ Imagen exportada exitosamente como: figura_indicadores_criticos.png\n")
## ✅ Imagen exportada exitosamente como: figura_indicadores_criticos.png
cat("   Resolución: 300 dpi | Tamaño: 11 x 11 pulgadas\n")
##    Resolución: 300 dpi | Tamaño: 11 x 11 pulgadas
cat("   Ubicación:", getwd(), "\n")
##    Ubicación: C:/Users/jgonz/OneDrive/Desktop/UN/2026s1/catedra/Informe2

Sesión de R

sessionInfo()
## R version 4.6.0 (2026-04-24 ucrt)
## Platform: x86_64-w64-mingw32/x64
## Running under: Windows 10 x64 (build 19045)
## 
## Matrix products: default
##   LAPACK version 3.12.1
## 
## locale:
## [1] LC_COLLATE=Spanish_Colombia.utf8  LC_CTYPE=Spanish_Colombia.utf8   
## [3] LC_MONETARY=Spanish_Colombia.utf8 LC_NUMERIC=C                     
## [5] LC_TIME=Spanish_Colombia.utf8    
## 
## time zone: America/Bogota
## tzcode source: internal
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## other attached packages:
## [1] scales_1.4.0    ggrepel_0.9.8   patchwork_1.3.2 tidyr_1.3.2    
## [5] dplyr_1.2.1     ggplot2_4.0.3  
## 
## loaded via a namespace (and not attached):
##  [1] gtable_0.3.6       jsonlite_2.0.0     compiler_4.6.0     tidyselect_1.2.1  
##  [5] Rcpp_1.1.1-1.1     jquerylib_0.1.4    yaml_2.3.12        fastmap_1.2.0     
##  [9] R6_2.6.1           labeling_0.4.3     generics_0.1.4     knitr_1.51        
## [13] tibble_3.3.1       bslib_0.10.0       pillar_1.11.1      RColorBrewer_1.1-3
## [17] rlang_1.2.0        utf8_1.2.6         cachem_1.1.0       xfun_0.57         
## [21] sass_0.4.10        S7_0.2.2           cli_3.6.6          withr_3.0.2       
## [25] magrittr_2.0.5     digest_0.6.39      grid_4.6.0         rstudioapi_0.18.0 
## [29] lifecycle_1.0.5    vctrs_0.7.3        evaluate_1.0.5     glue_1.8.1        
## [33] farver_2.1.2       rmarkdown_2.31     purrr_1.2.2        tools_4.6.0       
## [37] pkgconfig_2.0.3    htmltools_0.5.9