Desafío 1:
Construye y ejecuta un prompt en ChatGPT para refinar el visual que presenta el facturamiento de las ventas por región. Las instrucciones para el refinamiento son las siguientes:
- Fondo de la figura y del área del gráfico en el color GRIS_1
- Color de las columnas en AQUA_1 (si deseas destacar solo una, puedes recurrir a AQUA_3, por ejemplo)
- Tamaño de la figura de (16,9)
- Cambia el título de la figura a un tamaño de 18 y color GRIS_5, ajusta las etiquetas y rótulos del eje x e y, cuando existan, a un tamaño 12 y color AZUL_1
- Elimina el máximo de bordes posible y ajusta los datos para que se presenten en las barras en orden de millones, con color AZUL_1 y tamaño 12
Prompt Reto 1
Tengo un DataFrame llamado df y ya agrupé las ventas por región en un DataFrame llamado facturacion_por_region.
Ahora quiero refinar el gráfico de barras para que cumpla con lo siguiente:
El fondo del gráfico y del área debe ser GRIS_1.
El color de las columnas debe ser AQUA_1.
El tamaño de la figura debe ser (16, 9).
El título debe tener tamaño 18, color GRIS_5.
Las etiquetas del eje x deben ser tamaño 12, color AZUL_1.
No quiero mostrar el eje y ni bordes.
Encima de cada barra quiero mostrar la facturación (en millones de pesos) con el mismo color AZUL_1, tamaño 12.
¿Puedes ayudarme con este gráfico?
Codigo
import matplotlib.pyplot as plt
# Figura y fondo del área
fig, ax = plt.subplots(figsize=(16, 9), facecolor=GRIS_1)
ax.set_facecolor(GRIS_1)
# Barras con color AQUA_1
bars = ax.bar(
facturacion_por_region['region'],
facturacion_por_region['facturacion'] / 1e6,
color=AQUA_1
)
# Título y estilos
ax.set_title('Facturación por Región en 2023', fontsize=18, color=GRIS_5)
ax.set_xticklabels(facturacion_por_region['region'], fontsize=12, color=AZUL_1)
ax.set_yticks([]) # Eliminar etiquetas del eje Y
ax.spines[['top', 'right', 'left', 'bottom']].set_visible(False) # Eliminar bordes
# Etiquetas encima de cada barra
for bar in bars:
height = bar.get_height()
ax.text(
bar.get_x() + bar.get_width() / 2,
height + 0.2,
f'MXN$ {height:.1f}M',
ha='center',
fontsize=12,
color=AZUL_1
)
plt.tight_layout()
plt.show()
Desafío 2:
Construye y ejecuta un prompt en ChatGPT para refinar el visual que presenta la proporción de personas pre-registradas en Zoop Pay. Las instrucciones para el refinamiento son las siguientes:
Fondo de la figura y del área del gráfico en el color GRIS_1. Color de las porciones: AZUL_1 para "Sí" y GRIS_3 para "No". Tamaño de la figura de (6,6). Cambia el título de la figura a un tamaño de 18 y color GRIS_5. Añade etiquetas en las porciones con tamaño 12 y los porcentajes también con tamaño 12 y en negrita. Los porcentajes deben estar en color BLANCO y las etiquetas de las porciones en el mismo color que las porciones. Ajusta la rosca para que su ancho sea de 0.4 y los porcentajes de las porciones estén en la posición 0.8 en relación al centro. Evita explosiones de porciones y efectos que dificulten el análisis del gráfico.
Prompt Reto 2 Tengo un DataFrame df con una columna zoop_pay que indica si el cliente está pre-registrado (“Sí” o “No”).
Ya hice el conteo con .value_counts() y ahora quiero generar un gráfico de dona refinado con las siguientes condiciones:
Fondo de la figura y del área del gráfico: GRIS_1.
“Sí” debe ir en color AZUL_1 y “No” en GRIS_3.
Tamaño de figura (6, 6).
Título tamaño 18, color GRIS_5.
Etiquetas en cada porción con tamaño 12, mismo color que la porción.
Porcentaje en negrita, tamaño 12, color BLANCO.
Ancho de la dona: 0.4.
Porcentaje dentro de la dona a 0.8 del centro.
Sin explosiones ni efectos raros. ¿Puedes ayudarme con eso?
Codigo
import matplotlib.pyplot as plt
# Conteo de pre-registro
conteo = df['zoop_pay'].value_counts().rename(index={'Sí': 'Sí', 'No': 'No'})
labels = conteo.index
colors = [AZUL_1 if label == 'Sí' else GRIS_3 for label in labels]
# Gráfico de dona refinado
fig, ax = plt.subplots(figsize=(6, 6), facecolor=GRIS_1)
ax.set_facecolor(GRIS_1)
wedges, texts, autotexts = ax.pie(
conteo,
labels=labels,
startangle=90,
colors=colors,
autopct='%1.1f%%',
pctdistance=0.8,
textprops={'fontsize': 12, 'weight': 'bold', 'color': BLANCO},
wedgeprops=dict(width=0.4)
)
# Ajustar color de las etiquetas según su porción
for i, text in enumerate(texts):
text.set_color(colors[i])
text.set_fontsize(12)
# Título
ax.set_title('Pre-registro en Zoop Pay', fontsize=18, color=GRIS_5)
plt.tight_layout()
plt.show()