Trazando
Última actualización: 2025-07-01 | Mejora esta página
Hoja de ruta
Preguntas
- ¿Cómo puedo representar mis datos?
- ¿Cómo puedo guardar mi gráfico para publicarlo?
Objetivos
- Crea un gráfico de series temporales mostrando un único conjunto de datos.
- Crea un gráfico de dispersión que muestra la relación entre dos conjuntos de datos.
matplotlib
es la
librería de gráficos científicos más utilizada en Python.
- Comúnmente usa una sub-biblioteca llamada
matplotlib.pyplot
. - Por defecto, Jupyter Notebook muestra los gráficos en línea.
- Los gráficos simples son (bastante) fáciles de crear.
PYTHON
time = [0, 1, 2, 3]
position = [0, 100, 200, 300]
plt.plot(time, position)
plt.xlabel('Time (hr)')
plt.ylabel('Position (km)')
Mostrar todas las figuras abiertas
En nuestro ejemplo de Jupyter Notebook, la ejecución de la celda debería generar la figura directamente debajo del código. La figura también se incluye en el documento de Notebook para su futura visualización. Sin embargo, otros entornos Python como una sesión Python interactiva iniciada desde un terminal o un script Python ejecutado a través de la línea de comandos requieren un comando adicional para mostrar la figura.
Indica a matplotlib
que muestre una figura:
Este comando también puede usarse dentro de un Cuaderno - por ejemplo, para mostrar múltiples figuras si varias son creadas por una sola celda.
Trazar datos directamente desde un Pandas dataframe
.
- También podemos graficar Pandas dataframes.
- Antes de graficar, convertimos los encabezados de columna de un tipo
de datos
string
ainteger
, ya que representan valores numéricos, usando str.replace() para eliminar el prefijogpdPercap_
y luego astype(int) para convertir la serie de valores de cadena (['1952', '1957', ..., '2007']
) a una serie de enteros:[1925, 1957, ..., 2007]
.
PYTHON
import pandas as pd
data = pd.read_csv('data/gapminder_gdp_oceania.csv', index_col='country')
# Extraer el año de los últimos 4 caracteres de cada nombre de columna
# Los nombres actuales de las columnas tienen la estructura 'gdpPercap_(año)',
# por lo que queremos conservar solo la parte del (año) para mayor claridad al graficar PIB vs. años
# Para ello usamos replace(), que elimina de la cadena los caracteres indicados en el argumento
# Este método funciona con cadenas, así que usamos replace() desde las funciones vectorizadas de cadenas de Pandas: Series.str
years = data.columns.str.replace('gdpPercap_', '')
# Convierte los valores de los años a integers, guardando los resultados de vuelta
data.columns = years.astype(int)
data.loc['Australia'].plot()
Selecciona y transforma los datos, luego los grafica.
- Por defecto,
DataFrame.plot
traza con las filas como eje X. - Podemos transponer los datos para graficar múltiples series.
Hay muchos estilos disponibles.
- Por ejemplo, haga un gráfico de barras usando un estilo más elegante.
Los datos también pueden ser graficados llamando directamente a la
función matplotlib
plot
.
- El comando es
plt.plot(x, y)
- El color y el formato de los marcadores también se puede especificar
como un argumento opcional adicional, por ejemplo,
b-
es una línea azul,g--
es una línea discontinua verde.
Obtener datos de Australia del marco de datos
PYTHON
years = data.columns
gdp_australia = data.loc['Australia']
plt.plot(years, gdp_australia, 'g--')
Puede graficar varios conjuntos de datos juntos.
PYTHON
# Select two countries' worth of data.
gdp_australia = data.loc['Australia']
gdp_nz = data.loc['New Zealand']
# Plot with differently-colored markers.
plt.plot(years, gdp_australia, 'b-', label='Australia')
plt.plot(years, gdp_nz, 'g-', label='New Zealand')
# Create legend.
plt.legend(loc='upper left')
plt.xlabel('Year')
plt.ylabel('GDP per capita ($)')
Añadir una leyenda
A menudo, cuando se trazan múltiples conjuntos de datos en la misma figura, es deseable tener una leyenda que describa los datos.
Esto se puede hacer en matplotlib
en dos etapas:
- Proporciona una etiqueta para cada conjunto de datos en la figura:
PYTHON
plt.plot(years, gdp_australia, label='Australia')
plt.plot(years, gdp_nz, label='New Zealand')
- Indica a
matplotlib
que cree la leyenda.
Por defecto matplotlib intentará colocar la leyenda en una posición
adecuada. Si prefiere especificar una posición, puede hacerlo con el
argumento loc=
, por ejemplo, para colocar la leyenda en la
esquina superior izquierda del gráfico, especifique
loc='upper left'
- Traza un gráfico de dispersión correlacionando el PIB de Australia y Nueva Zelanda
- Utilice
plt.scatter
oDataFrame.plot.scatter
Mínimos y Máximos
Rellena los espacios en blanco siguientes para representar el PIB per cápita mínimo a lo largo del tiempo para todos los países de Europa. Modifícalo de nuevo para trazar el PIB per cápita máximo a lo largo del tiempo para Europa.
Correlaciones
Modifica el ejemplo de las notas para crear un gráfico de dispersión que muestre la relación entre el PIB per cápita mínimo y máximo entre los países de Asia para cada año del conjunto de datos. ¿Qué relación observas (si la hay)?
PYTHON
data_asia = pd.read_csv('data/gapminder_gdp_asia.csv', index_col='country')
data_asia.describe().T.plot(kind='scatter', x='min', y='max')
No se aprecian correlaciones particulares entre los valores mínimos y máximos del PIB año tras año. Parece que las fortunas de los países asiáticos no suben y bajan juntas.
Correlaciones (continued)

Parece que la variabilidad de este valor se debe a una fuerte caída después de 1972. ¿Tal vez haya algo de geopolítica en juego? Dado el predominio de los países productores de petróleo, tal vez el índice del crudo Brent sería una comparación interesante Mientras que Myanmar tiene sistemáticamente el PIB más bajo, la nación con el PIB más alto ha variado más notablemente.
Más Correlaciones
Este breve programa crea un gráfico que muestra la correlación entre el PIB y la esperanza de vida para 2007, normalizando el tamaño del marcador por la población:
PYTHON
data_all = pd.read_csv('data/gapminder_all.csv', index_col='country')
data_all.plot(kind='scatter', x='gdpPercap_2007', y='lifeExp_2007',
s=data_all['pop_2007']/1e6)
Utilizando la ayuda en línea y otros recursos, explique qué hace cada
argumento de plot
.
Un buen lugar para buscar es la documentación de la función plot - help(data_all.plot).
tipo - Como ya se ha visto, determina el tipo de gráfico que se dibujará.
x e y - Un nombre de columna o índice que determina qué datos se colocarán en los ejes x e y del gráfico
s - Encontrará más detalles en la documentación de plt.scatter. Un solo número o un valor para cada punto de datos. Determina el tamaño de los puntos trazados.
Guardar el gráfico en un archivo
Si estás satisfecho con el gráfico que ves, puede que quieras guardarlo en un archivo, tal vez para incluirlo en una publicación. Hay una función en el módulo matplotlib.pyplot que hace esto: savefig. Llamando a esta función, por ejemplo con
guardará la figura actual en el archivo my_figure.png
.
El formato del archivo se deducirá automáticamente de la extensión del
nombre del archivo (otros formatos son pdf, ps, eps y svg).
Tenga en cuenta que las funciones en plt
se refieren a
una variable de figura global y después de que una figura se ha mostrado
en la pantalla (por ejemplo, con plt.show
) matplotlib hará
que esta variable se refiera a una nueva figura vacía. Por lo tanto,
asegúrese de llamar a plt.savefig
antes de que el gráfico
se muestre en pantalla, de lo contrario puede encontrar un archivo con
un gráfico vacío.
Cuando se usan dataframes, los datos son a menudo generados y
graficados en pantalla en una sola línea. Además de usar
plt.savefig
, podemos guardar una referencia a la figura
actual en una variable local (con plt.gcf
) y llamar al
método de clase savefig
desde esa variable para guardar la
figura en un fichero.
Haciendo sus gráficos accesibles
Siempre que estés generando gráficos para un artículo o una presentación, hay algunas cosas que puedes hacer para asegurarte de que todo el mundo pueda entender tus gráficos.
- Asegúrese siempre de que su texto es lo suficientemente grande como
para ser leído. Utilice el parámetro
fontsize
enxlabel
,ylabel
,title
, ylegend
, ytick_params
conlabelsize
para aumentar el tamaño del texto de los números en sus ejes. - Del mismo modo, debe hacer que los elementos de su gráfico sean
fáciles de ver. Utilice
s
para aumentar el tamaño de sus marcadores de dispersión ylinewidth
para aumentar el tamaño de sus líneas de trazado. - El uso del color (y nada más) para distinguir entre los diferentes
elementos del gráfico hará que sus gráficos sean ilegibles para
cualquiera que sea daltónico, o que tenga una impresora de oficina en
blanco y negro. Para las líneas, el parámetro
linestyle
le permite utilizar diferentes tipos de líneas. Para los gráficos de dispersión,marker
le permite cambiar la forma de sus puntos. Si no está seguro de sus colores, puede utilizar Coblis u Oráculo de colores para simular el aspecto que tendrían sus gráficos para las personas daltónicas.
Puntos Clave
-
matplotlib
es la librería de gráficos científicos más utilizada en Python. - Traza datos directamente desde un marco de datos Pandas.
- Selecciona y transforma datos, luego los grafica.
- Dispone de muchos estilos de representación gráfica: consulte la Galería gráfica de Python para más opciones.
- Puede graficar varios conjuntos de datos juntos.