Chapter 2 Digit ID Chapter 2 Digit
1 1 Los Productos de Origen Animal
2 2 Productos del Reino Vegetal
3 3 Animales y Vegetales Bi-Productos
4 4 Los Productos Alimenticios
5 5 Productos Minerales
6 6 Productos Químicos
7 7 Plásticos y Cauchos
8 8 Pieles de Animales
9 9 Productos de Madera
10 10 Artículos de Papel
11 11 Textiles
12 12 Calzado, y Sombreros
13 13 Piedra y Cristal
14 14 Metales Preciosos
15 15 Rieles
16 16 Máquinas
17 17 Transporte
18 18 Instrumentos
19 20 Diverso
Visualizaciones base datos comercio e inversion en Mexico
Exportaciones totales
Exportaciones a USA
1993-2024
Código
|>
xm filter(Pais == "USA") |>
ggplot(aes(Año, Exportaciones/1000)) +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
scale_x_continuous(breaks = seq(from =1993, to = 2025, by = 2)) +
geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "Exportaciones a USA",
caption = "J.Cornick con base en Data Mexico "
)
(En miles de millones de US $)
Esta otra visualización permite ver claramente un cambio en la tendencia lineal a partir de 2018.
Código
|>
xm filter(Pais == "USA") |>
ggplot(aes(Año, Exportaciones/1000)) +
theme_bw() +
scale_x_continuous(breaks = seq(from =1993, to = 2025, by = 2)) +
geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(
data = . %>% filter(Año < 2018),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3) +
geom_smooth(
data = . %>% filter(Año > 2016, Año < 2025),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3) +
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico ") +
guides(fill = "none")
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais == "USA", Año > 2014) |>
ggplot(aes(Año, Exportaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2025, by = 1)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(
data = . %>% filter(Año < 2025),
color = "steelblue1",
fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
Exportaciones a otros socios comericales importantes
1993-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año < 2025) |>
mutate(Pais = fct_reorder(Pais, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Año, Exportaciones/1000, color = Pais, fill = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1)+
#geom_smooth(aes(fill = Pais, color = Pais), alpha = 0.2, linetype = 3)+
geom_smooth( alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año >2014 & Año < 2025) |>
mutate(Pais = fct_reorder(Pais, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Año, Exportaciones/1000, color = Pais, fill = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1)+
geom_smooth(alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "right")
(En miles de millones de US $)
USA y resto del mundo, proporciones
1993-2024
Código
# Primero calculamos porcentajes
<- xm |>
xm_percentages group_by(Año) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Pais = fct_reorder(Pais, desc(percent_valor), .fun = last))
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_col(position = "stack") +
scale_x_continuous(breaks = seq(from = 1995, to = 2025, by = 5)) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.25
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
2015-2024
Código
<- xm |>
xm_percentages filter(Año >2014,Año < 2025) |>
group_by(Año) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Pais = fct_reorder(Pais, desc(percent_valor), .fun = last))
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_col(position = "stack") +
scale_x_continuous(breaks = seq(from = 2015, to = 2025, by = 1)) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dotted",
linewidth = 0.25
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
) theme(legend.position = "bottom")
(Estados Unidos y resto del mundo)
Exportaciones por producto
Como los nombres de los capítulos han sido simplificados, conviene recordar sus definiciones completas
Las definiciones detalladas, y las seciones que componen cada una pueden consultarse en Sistema Armonizado.
Todos los productos 1993-2024, valor
Código
|>
xmp arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
scale_x_yearqtr(
breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 2),
minor_breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 1),
format = "%Y") +
geom_line(linewidth = .75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
Todos los productos, porcentajes
Código
<- xmp |>
prod_percentages mutate(
Year = as.numeric(format(Trimestre, "%Y")),
lump_weight = if_else(Year >= 2020, Exportaciones, 0),
= fct_lump_n(
Capítulo f = Capítulo,
n = 7,
w = lump_weight,
other_level = "Otros"
)|>
) group_by(Year,Trimestre,Capítulo) |>
summarise(
across(where(is.numeric), \(x) sum(x, na.rm = TRUE)),
.groups = "drop"
|>
) group_by(Trimestre, Capítulo) |>
summarise(Exportaciones = sum(Exportaciones, na.rm = TRUE), .groups = "drop") |>
group_by(Trimestre) |>
mutate(percent_valor = Exportaciones / sum(Exportaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Capítulo = fct_reorder(Capítulo, Exportaciones, .fun = sum, .desc = TRUE))
Y ahora generamos los gráficos
Código
|>
prod_percentages ggplot(aes(x = Trimestre, y = percent_valor, fill = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
geom_area(alpha = 0.9) +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.25) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_x_yearqtr(
breaks = seq(from = as.yearqtr("1993 Q1"), to = as.yearqtr("2025 Q1"), by = 1),
expand = c(0,0))+
labs(
x = "",
y = "",
fill = "",
caption = "J.Cornick con base de Data Mexico") +
theme(
legend.position = "bottom",
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
panel.grid.major.y = element_blank(),
panel.grid.minor.y = element_blank()
)
Máquinaria, equipo de transporte y minerales 1993-2024
Código
|>
xmp filter(Capítulo %in% c("Máquinas", "Transporte", "Minerales")) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
scale_x_yearqtr(
breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 2),
minor_breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 1),
format = "%Y"
+
) geom_line(linewidth = 0.75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México")
(en miles de millones US $)
Máquinaria, equipo de transporte y minerales 2015-2024
Código
|>
xmp filter(Capítulo %in% c("Máquinas", "Transporte", "Minerales")) |>
filter(Trimestre > 2014.75) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo, fill = Capítulo)) +
theme_bw() +
scale_color_brewer(palette = "Dark2") +
scale_fill_brewer(palette = "Dark2")+
scale_x_yearqtr(
breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 2),
minor_breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 1),
format = "%Y"
+
) geom_line(linewidth = 0.75) +
geom_smooth(alpha = 0.2, linetype = 3) +
labs(
color = "Capítulo",
caption = "J.Cornick con base en Data México",
x = "",
y = "Miles de millones, US ") +
guides(fill = "none")
(en miles de millones US $)
Top 5 excluyendo máquinaria, equipo de transporte, minerales y “otros”
Código
|>
xmp filter(Capítulo %in% c("Instrumentos", "Alimentos", "Vegetales", "Rieles", "Plásticos")) |>
arrange(Trimestre) |>
mutate(Capítulo = fct_reorder(Capítulo, desc(Exportaciones), .fun = last)) |>
ggplot(aes(Trimestre, Exportaciones/1000, color = Capítulo)) +
theme_bw() +
scale_fill_brewer(palette = "Dark2") +
scale_x_yearqtr(
breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 2),
minor_breaks = seq(min(xmp$Trimestre), max(xmp$Trimestre), by = 1),
format = "%Y"
+
) geom_line(linewidth = .75) +
labs(color = "Capítulo",
caption = "J.Cornick con base en Data México",
x = "",
y = "Miles de millones, US $")
(en miles de millones US $)
Exportaciones a USA por producto
Todos los productos
Código
|>
xmusa filter(Pais == "USA",Año < "2025") |>
mutate(Capitulo = fct_reorder(Capitulo, desc(Exportaciones), .fun = last,.na_rm = TRUE)) |>
ggplot(
aes(Año,Exportaciones/1000000, color = Capitulo)
+
) theme_bw(
+
)scale_fill_brewer(
palette = "Dark2"
+
) theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 2006, to = 2024, by = 1)
+
) geom_line(
linewidth = 1
+
) labs(
x = "",
y = "Miles de millones de US$",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "bottom")
Warning: Removed 14 rows containing missing values or values outside the scale range
(`geom_line()`).
(en miles de millones US $)
Dadas las diferencias en escala, parece razonable graficar Maquinaria y Equipo de Transporte por separado.
Maquinaria y equipo de transporte
Código
|>
xmusa filter(Pais == "USA",Capitulo %in% c("Maquinas", "Transporte"), Año < "2025") |>
mutate(Capitulo = fct_reorder(Capitulo, desc(Exportaciones), .fun = last)) |>
ggplot(
aes(Año,Exportaciones/1000000, color = Capitulo)
+
) theme_bw(
+
)scale_fill_brewer(
palette = "Dark2"
+
) theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 2006, to = 2024, by = 1)
+
) geom_line(
linewidth = 1
+
) geom_smooth(
data = . %>% filter(Año < 2018),
method = "lm",
se = FALSE,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2016),
method = "lm",
se = FALSE,
linetype = 3
+
) labs(
x = "",
y = "Miles de millones de US$",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "bottom")
(en miles de millones US $)
Instrumentos, vegetales, metales, plásticos,alimentos y minerales
Código
|>
xmusa filter(Pais == "USA",Capitulo %in% c("Instrumentos", "Vegetales", "Metales", "Plasticos", "Alimentos", "Minerales"), Año < "2025") |>
mutate(Capitulo = fct_reorder(Capitulo, desc(Exportaciones), .fun = last)) |>
ggplot(
aes(Año,Exportaciones/1000000, color = Capitulo)
+
) theme_bw(
+
)scale_fill_brewer(
palette = "Dark2"
+
) theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 2006, to = 2024, by = 1)
+
) geom_line(
linewidth = 1
+
) geom_smooth(
data = . %>% filter(Año < 2018),
method = "lm",
se = FALSE,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2016),
method = "lm",
se = FALSE,
linetype = 3
+
) labs(
x = "",
y = "Miles de millones de US$",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "bottom")
(en miles de millones US $)
Los demás productos
Código
|>
xmusa filter(Pais == "USA", !(Capitulo %in% c("Maquinas", "Transporte","Instrumentos", "Vegetales", "Metales", "Plásticos", "Alimentos", "Minerales", "Otros")),
< "2025") |>
Año mutate(Capitulo = fct_reorder(Capitulo, desc(Exportaciones), .fun = last)) |>
ggplot(
aes(Año,Exportaciones/1000000, color = Capitulo)
+
) theme_bw(
+
)scale_fill_brewer(
palette = "Dark2"
+
) theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 2006, to = 2024, by = 1)
+
) geom_line(
linewidth = 1
+
) geom_smooth(
data = . %>% filter(Año < 2018),
method = "lm",
se = FALSE,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2016),
method = "lm",
se = FALSE,
linetype = 3
+
) labs(
x = "",
y = "Miles de millones de US$",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "bottom")
Warning: There was 1 warning in `mutate()`.
ℹ In argument: `Capitulo = fct_reorder(Capitulo, desc(Exportaciones), .fun =
last)`.
Caused by warning:
! `fct_reorder()` removing 16 missing values.
ℹ Use `.na_rm = TRUE` to silence this message.
ℹ Use `.na_rm = FALSE` to preserve NAs.
Warning: Removed 9 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 8 rows containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 14 rows containing missing values or values outside the scale range
(`geom_line()`).
(en miles de millones US $)
Exportaciones por estado
Todos los estados
Código
|> select(-Importaciones) |>
xmest mutate(Estado = fct_reorder(Estado, desc(Exportaciones), .fun = last)) |>
ggplot(aes(IDTrim, Exportaciones, color = Estado))+
theme_bw()+
scale_fill_brewer(
palette = "Dark2"
+
) geom_line(
linewidth = 0.75
+
)theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 20061, to = 20241, by = 10)
+
) labs(
x = "",
y = "Miles de millones de US$",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "bottom")
(en miles de millones US $)
Top 7 estados exportadores
Código
|> select(-Importaciones) |>
xmest filter(Estado %in% c("Chihuahua", "Ciudad de México", "Nuevo León",
"Baja California", "Jalisco", "Tamaulipas"),
< 20251
IDTrim |>
) mutate(Estado = fct_reorder(Estado, desc(Exportaciones), .fun = last)
|>
) ggplot(aes(IDTrim, Exportaciones/1000, color = Estado))+
theme_bw()+
scale_fill_brewer(
palette = "Paired"
+
) geom_line(
linewidth = 0.75
+
)theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 20061, to = 20241, by = 10)
+
) labs(
x = "",
y = "Exportaciones, miles de millones US $",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
)
(en miles de millones US $)
Top 8 a 14 Estados exportadores
Código
|> select(-Importaciones) |>
xmest filter(Estado %in% c("Coahuila de Zaragoza","Sonora", "Estado de México", "Guanajuato",
"Querétaro", "Puebla", "San Luis Potosí"),
< 20251
IDTrim |>
) mutate(Estado = fct_reorder(Estado, desc(Exportaciones), .fun = last)
|>
) ggplot(aes(IDTrim, Exportaciones/1000, color = Estado))+
theme_bw()+
scale_fill_brewer(
palette = "Dark2"
+
) geom_line(
linewidth = 0.75
+
)theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 20061, to = 20241, by = 10)
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
)
(en miles de millones US $)
Los demás
Código
|> select(-Importaciones) |>
xmest filter(!(Estado %in% c("Chihuahua", "Ciudad de México", "Nuevo León","Baja California",
"Jalisco", "Tamaulipas", "Coahuila de Zaragoza","Sonora",
"Estado de México", "Guanajuato", "Querétaro", "Puebla", "San Luis Potosí",
"No Informado")),
< 20091
IDTrim |>
) mutate(Estado = fct_reorder(Estado, desc(Exportaciones), .fun = last)
|>
) ggplot(aes(IDTrim, Exportaciones/1000, color = Estado)) +
theme_bw()+
scale_fill_brewer(
palette = "Dark2"
+
) geom_line(
linewidth = 0.75
+
) theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) scale_x_continuous(
breaks = seq(from = 20061, to = 20241, by = 10)
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico",
+
) theme(legend.position = "right")
(en miles de millones US $)
Importaciones
De USA
1993-2024
Código
|>
xm filter(Pais == "USA", Año < 2025) |>
ggplot(aes(Año, Importaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.2)+
labs(
x = "",
y = "Importaciones de USA, miles de millones de US $",
caption = "J.Cornick con base en Data Mexico "
)
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais == "USA", Año > 2014 & Año < 2025) |>
ggplot(aes(Año, Importaciones/1000))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(color = "steelblue1",
fill = "steelblue1", alpha = 0.4)+
labs(
x = "",
y = "Importaciones de USA, miles de millones de US $",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "bottom")
(En miles de millones de US $)
Otros socios comerciales
1993-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año < 2025) |>
mutate(Pais = fct_reorder(Pais, desc(Importaciones), .fun = last)) |>
ggplot(aes(Año, Importaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Dark2")+
scale_x_continuous(breaks = seq(from =1993, to = 2024, by = 2)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "Importaciones, miles de millones US $",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
+
)theme(legend.position = "right")
(En miles de millones de US $)
2015-2024
Código
|>
xm filter(Pais != "USA" & Pais != "Otros", Año >2014 & Año < 2025) |>
mutate(Pais = fct_reorder(Pais, desc(Importaciones), .fun = last)) |>
ggplot(aes(Año, Importaciones/1000, color = Pais))+
theme_bw()+
scale_color_brewer(palette = "Paired")+
scale_x_continuous(breaks = seq(from =2015, to = 2024, by = 1)) +
geom_line(linewidth = 1)+
geom_smooth(aes(fill = Pais), alpha = 0.2, linetype = 3)+
labs(
x = "",
y = "Importaciones, miles de millones de US $",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "right")
(En miles de millones de US $)
USA y resto del mundo, proporciones
1993-2024.
Código
<- xm |>
xm_percentages group_by(Año) |>
mutate(percent_valor = Importaciones / sum(Importaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Pais = fct_reorder(Pais, desc(percent_valor), .fun = last))
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 1993, to = 2025, by = 2)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dotted",
linewidth = 0.25
+
) labs(
x = "",
y = "Origen de las importaciones",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
)theme(legend.position = "bottom")
2015-2024
Código
<- xm |>
xm_percentages filter( Año >2014 & Año < 2025) |>
group_by(Año) |>
mutate(percent_valor = Importaciones / sum(Importaciones, na.rm = TRUE)) |>
ungroup() |>
mutate(Pais = fct_reorder(Pais, desc(percent_valor), .fun = last))
ggplot(xm_percentages, aes(x = Año, y = percent_valor, fill = Pais)) +
theme_bw() + # Use a clean black-and-white theme
scale_fill_brewer(palette = "Dark2") + # Use the specified color palette for fill
geom_col(position = "stack") + # Stacks the pre-calculated percentages
scale_x_continuous(breaks = seq(from = 2015, to = 2025, by = 1)) + # Display labels every 5 years
scale_y_continuous(
breaks = seq(0, 1, by = 0.1), # Set breaks at 10% increments
labels = scales::percent # Formats the y-axis as percentages
+
) geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1), # Add horizontal lines for each break
color = "white",
linetype = "dotted",
linewidth = 0.25
+
) labs(
x = "",
y = "",
fill = "",
color = "",
caption = "J.Cornick con base de Data Mexico"
+
) theme(legend.position = "bottom")
Inversión extranjera directa
Total USA
Código
|>
xm arrange(Año) |>
filter(Pais == "USA") |>
ggplot(aes(Año,Inversion/1000))+
geom_line(linewidth = 1, color = "steelblue4")+
geom_smooth(
data = . %>% filter(Año < 2018),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2016),
#aes(fill = "steelblue1", alpha = 0.4),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3
+
)scale_x_continuous(breaks = seq(from = 1999, to = 2024, by = 1)) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
)labs(
x = "",
y = "Miles de millones de US $",
caption = "J.Cornick con base en Data México"
)
(en miles de millones US $)
Gráfico inversión USA, promedios móviles 3 años
Código
|>
xm arrange(Año) |>
mutate(
Inv3 = rollmean(Inversion, k = 3, fill = NA, align = "center")
|>
) filter(Pais == "USA") |>
ggplot(aes(Año,Inv3/1000)) +
geom_line(linewidth = 1, color = "steelblue4") +
theme_bw()+
geom_smooth(
data = . %>% filter(Año <= 2018),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2017),
method = "lm",
se = TRUE,
fill = "steelblue1",
alpha = 0.2,
linetype = 3
+
) scale_x_continuous(breaks = seq(from = 1999, to = 2024, by = 1)) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
)labs(
x = "",
y = "promedio movil 3 a;os",
caption = "J.Cornick con base en Data Mexico"
)
Warning: Removed 1 row containing non-finite outside the scale range
(`stat_smooth()`).
Warning: Removed 1 row containing missing values or values outside the scale range
(`geom_line()`).
(en miles de millones US $)
Japón, Alemania y Canadá.
Código
|>
xm arrange(Año) |>
filter(Pais %in% c("Japon", "Alemania", "Canada")) |>
mutate(Pais = fct_reorder(Pais, desc(Inversion), .fun = last)) |>
ggplot(
aes(Año,Inversion/1000, color = Pais)
+
) theme_bw()+
scale_color_brewer(palette = "Dark2")+
geom_line(linewidth = 1)+
geom_smooth(
data = . %>% filter(Año <= 2018),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2017),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) scale_x_continuous(breaks = seq(from = 1999, to = 2024, by = 1)) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) labs(
x = "",
y = "Miles de millones de US $",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
)
(en miles de millones US $)
Otros países
Código
|>
xm arrange(Año) |>
filter(!(Pais %in% c("Japon", "Alemania", "Canada", "USA", "Otros"))) |>
mutate(Pais = fct_reorder(Pais, desc(Inversion), .fun = last)) |>
ggplot(
aes(Año,Inversion/1000, color = Pais)
+
) theme_bw()+
scale_color_brewer(palette = "Dark2")+
geom_line(linewidth = 1)+
geom_smooth(
data = . %>% filter(Año <= 2018),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2017),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) scale_x_continuous(breaks = seq(from = 1999, to = 2024, by = 1)) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) labs(
x = "",
y = "Miles de millones de US $",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
#+
) #theme(legend.position = "bottom")
(en miles de millones US $)
Código
|>
xm arrange(Año) |>
filter(!(Pais %in% c("Japon", "Alemania", "Canada", "USA", "Otros", "Espana", "Belgica"))) |>
mutate(Pais = fct_reorder(Pais, desc(Inversion), .fun = last)) |>
ggplot(
aes(Año,Inversion/1000, color = Pais)
+
) theme_bw()+
scale_color_brewer(palette = "Dark2")+
geom_line(linewidth = 1)+
geom_smooth(
data = . %>% filter(Año <= 2018),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) geom_smooth(
data = . %>% filter(Año > 2017),
method = "lm",
se = FALSE,
alpha = 0.2,
linetype = 3
+
) scale_x_continuous(breaks = seq(from = 1999, to = 2024, by = 1)) +
theme(
axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)
+
) labs(
x = "",
y = "Miles de millones de US $",
fill = "",
color = "",
caption = "J.Cornick con base en Data Mexico"
#+
) #theme(legend.position = "bottom")
(en miles de millones US $)
Empleo y otros datos IMMEX
Creación de vectores para selección de Estados. Para seleccionar ciudades simplemente elegiremos los niveles de entidad aque no se encuentren en Estados
Datos nacionales
Exportaciones (millones en pesos)
Código
|>
immex filter(entidad == "TOTAL") |>
ggplot(
aes(Fecha, Exportaciones/1000000)
+
) theme_bw() +geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
title = "México: exportaciones del régimen IMMEX, 2007-2025",
subtitle = "en millones de pesos",
x = "",
y = "Exportaciones",
caption = "J.Cornick con base en INEGI"
)
Trabajadores
Código
|>
immex filter(entidad == "TOTAL") |>
ggplot(
aes(Fecha, Trabajadores/1000000)
+
) theme_bw() +geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
title = "México: trabajadores en empresas IMMEX, 2007-2025",
subtitle = "en millones",
x = "",
y = "Trabajadores",
caption = "J.Cornick con base en INEGI"
)
En millones
Empresas
Código
|>
immex filter(entidad == "TOTAL") |>
ggplot(
aes(Fecha, Establecimientos)
+
) theme_bw() +geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
title = "México: establecimientos en régimen IMMEX, 2007-2025",
subtitle = "en millones",
x = "",
y = "Establecimientos",
caption = "J.Cornick con base en INEGI"
)
Remuneraciones
Código
|>
immex filter(entidad == "TOTAL") |>
ggplot(
aes(Fecha, Remuneraciones/1000)
+
) theme_bw() +geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
title = "México: remuneraciones pagadas a trabajadores del régimen IMMEX, 2007-2025",
subtitle = "en millones de pesos",
x = "",
y = "Remuneraciones",
caption = "J.Cornick con base en INEGI"
)
Remuneraciones promedio
Código
|>
immex filter(entidad == "TOTAL") |>
mutate(RemProm = Remuneraciones / Trabajadores) |>
ggplot(
aes(Fecha, RemProm)
+
) theme_bw() +geom_line(linewidth = 1, color = "steelblue4") +
geom_smooth(color = "steelblue1", fill = "steelblue1", alpha = 0.4)+
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
title = "México: remuneraciones promedio del régimen IMMEX, 2007-2025",
subtitle = "en miles de pesos",
x = "",
y = "Remuneraciones",
caption = "J.Cornick con base en INEGI"
)
Datos estatales
Como primer paso, identificamos los estados cuyas exportaciones son más importantes
<- immex |>
mainE filter(entidad %in% Estados, entidad != "TOTAL") |>
mutate(weight = if_else(Fecha > "2020-12-01", Exportaciones,0),
entidad = fct_lump_n(
f = entidad,
n = 8,
w = weight,
other_level = "Otros" # todas las otras entidades tiene ahora el nombre "otros", pero no han sido colapsadas en un nueo factor, lo que crea filas duplicadas en el data fraem
|>
)) group_by(entidad, Fecha) |>
summarise(
# Como solo las filas de Otros están duplicadas, este código las suma. En los demás casos, la suma de una fila es el valor de la fila
across(where(is.numeric), \(x) sum(x, na.rm = TRUE)),
.groups = "drop" # Ungroup after summarising
|>
) mutate(entidad = fct_reorder(entidad, desc(Exportaciones), .fun = last))
Traducimos los datos a porcentajes y los graficamos
Código
<- mainE |>
mainE group_by(Fecha) |>
mutate(PorcEx = Exportaciones/sum(Exportaciones)) |>
ungroup()
|>
mainE mutate(entidad = fct_reorder(entidad, desc(PorcEx), .fun = last)) |>
ggplot(aes(Fecha,PorcEx, color = entidad,fill = entidad)) +
theme_bw() +
geom_col(position = "stack") +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.25) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_color_brewer(palette = "Paired") +
scale_fill_brewer(palette = "Paired") +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0))
Los ocho principales exportadores representan el 80% del total de las exportaciones bajo el régimen IMMEX, por lo que el grupo residual, Otros
, se excluye en el los demás gráficos de esta sección
Exportaciones por estado
Código
|>
mainE filter(entidad != "Otros") |>
mutate(entidad = fct_reorder(entidad, desc(PorcEx), .fun = last)) |>
ggplot(aes(Fecha, Exportaciones/1000, color = entidad)) +
theme_bw() +
scale_color_brewer(palette = "Paired") +
geom_line() +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
labs(
x = "",
y = "Exportaciones, MM de pesos",
color = "",
caption = "j.Cornick con base en INEGI"
)
Código
|>
mainE filter(entidad != "Otros") |>
mutate(entidad = fct_reorder(entidad, desc(PorcEx), .fun = last)) |>
ggplot(aes(Fecha, PorcEx, color = entidad, fill = entidad)) +
theme_bw() +
scale_color_brewer(palette = "Paired") +
scale_fill_brewer(palette = "Paired") +
geom_col(position = "fill") +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
scale_y_continuous(expand = c(0,0))+
labs(
x = "",
y = "Porcentaje de las exportaciones",
color = "",
fill = "",
caption = "j.Cornick con base en INEGI",
)
Trabajadores por estado
Código
|>
mainE filter(entidad != "Otros") |>
mutate(entidad = fct_reorder(entidad, Trabajadores, .fun = last, .desc = TRUE)) |>
ggplot(aes(Fecha, Trabajadores)) +
theme_bw() +
scale_color_brewer(palette = "Paired") +
geom_line(aes(color=entidad)) +
#geom_point(aes(shape = entidad), size = 0.75)+
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
labs(
x = "",
y = "",
color = "",
shape = "",
caption = "j.Cornick con base en INEGI"
)
Traducimos los datos a porcentajes y los graficamos
Nótese que para generar gráficos con la distribución porcentual de una variable podemos usar dos métodos. Si usamos geom_col(position = fill)
los porcentajes son calculados automáticamente por ggplot. Esto es muy conveniente, pero tienen al desventaja de que los datos en términos porcentuales no quedan incorporados en la base de datos. En el código que sigue, por lo tanto, ilustramos un método alternativo: primero se calculan explícitamente los porcentajes, y luego se procede a graficar. Aunque en este caso concreto no se han incorporado estos datos a la base de dato, sería muy fácil hacerlo si estuviésemos interesados en hacerlo.
Código
|>
mainE filter(entidad != "Otros") |>
group_by(Fecha) |>
mutate(PorcTrab = Trabajadores/sum(Trabajadores)) |>
ungroup() |>
mutate(entidad = fct_reorder(entidad, desc(PorcTrab), .fun = last)) |>
ggplot(aes(Fecha,PorcTrab, color = entidad,fill = entidad)) +
theme_bw() +
geom_col(position = "stack") +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.25) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_color_brewer(palette = "Paired") +
scale_fill_brewer(palette = "Paired") +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
labs(
x = "",
y = "Distribución Trabajadores IMMEX por Estado",
fill = "",
color = "",
caption = "J.Cornick con base en INEGI"
)
Empresas por estado
Código
|>
mainE filter(entidad != "Otros") |>
ggplot(aes(Fecha, Establecimientos, color = entidad)) +
theme_bw() +
scale_color_brewer(palette = "Paired") +
geom_line() +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
labs(
x = "",
y = "Establecimientos",
color = "",
caption = "j.Cornick con base en INEGI"
)
Traducimos los datos a porcentajes y los graficamos
Código
|>
mainE filter(entidad != "Otros") |>
group_by(Fecha) |>
mutate(PorcEmp = Establecimientos/sum(Establecimientos)) |>
ungroup() |>
mutate(entidad = fct_reorder(entidad, desc(PorcEmp), .fun = last)) |>
ggplot(aes(Fecha,PorcEmp, color = entidad,fill = entidad)) +
theme_bw() +
geom_col(position = "stack") +
geom_hline(
yintercept = seq(0.1, 0.9, by = 0.1),
color = "white",
linetype = "dotted",
linewidth = 0.25) +
scale_y_continuous(
breaks = seq(0, 1, by = 0.1),
labels = scales::percent,
expand = c(0, 0)) +
scale_color_brewer(palette = "Dark2") +
scale_fill_brewer(palette = "Dark2") +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)) +
labs(
x = "",
y = "Distribución establecimiewntos",
fill = "",
color = "",
caption = "J.Cornick con base en INEGI"
)
Código
|>
mainE filter(entidad != "Otros") |>
mutate(entidad = fct_reorder(entidad, desc(Remuneraciones), .fun = last)) |>
ggplot(
aes(Fecha, Remuneraciones/1000, color = entidad)
+
) theme_bw() +
scale_color_brewer(palette = "Paired") +
geom_line() +
scale_x_date(
date_breaks = "1 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
x = "",
y = "Remuneraciones",
caption = "J.Cornick con base en INEGI"
)
por Estado, 2007-2025 <> En millones de pesos
Remuneraciones promedio
Código
|>
mainE filter(entidad != "Otros") |>
mutate(RemProm = Remuneraciones / Trabajadores) |>
mutate(entidad = fct_reorder(entidad, desc(RemProm), .fun = last)) |>
ggplot(aes(Fecha, RemProm, color = entidad)) +
theme_bw() +
geom_line() +
scale_color_brewer(palette = "Paired") +
scale_x_date(
date_breaks = "2 year",
date_labels = "%Y",
expand = c(0,0)
+
)labs(
x = "",
y = "Remuneraciones promedio",
color = "",
caption = "J.Cornick con base en INEGI"
)