Show Menu
Cheatography

Python matplotlib Cheat Sheet by

Python matplotlib cheat sheet

Creación básica de matriz 2x2 de gráficos

fig, ax = plt.su­­bp­l­o­ts(2, 2)
fig = plt.fi­­gure()
plt.fi­­gure() #Opcional

Creación básica de gráficos

ax[0,0­].p­­­l­­o­­t(y1)
fig.ad­­­d­_­s­­u­­bp­­­lot(2, 2, 1)
plt.su­­­b­p­l­­ot(2, 2, 1)
 
plt.pl­­­o­t(y1)
plt.pl­­­o­t(y1)
ax[0,1­].h­­is­­t(y2, bins = n)
fig.ad­­­d­_­s­­u­­bp­­­lot(2, 2, 2)
plt.su­­­­­b­p­­l­­­ot(2, 2, 2)
 
plt.hi­­st(y2, bins = n)
plt.hi­­st(y2, bins = n)

Import

import matplo­tli­b.p­yplot as plt
import matplotlib as mpl

Parámetros de plt.plot()

 
fig, ax = plt.su­­bp­l­ots()
 
g = ax.plo­­t(­data)
linestyle = "­-" / linestyle = "­sol­id"
g[0].s­­et­_­l­in­­est­­yl­e­(­"­--­­")
linestyle = "­--" / linestyle = "­das­hed­"
linestyle = "­-." / linestyle = "­das­hdo­t"
linestyle = "." / linestyle = "­dot­ted­"
linestyle = "­Non­e" / linestyle = "­"
linewidth = n
g[0].s­­et­_­l­in­­ewi­­dth(n)
marker = "­o"
g[0].s­­et­_­m­ar­­ker­­("o­")
marker­edg­ewidth
ancho del borde del marcador
marker­edg­ecolor
color del borde del marcador
marker­fac­ecolor
color de fondo del marcador
marker­fac­eco­loralt
color altern­ativo para el color de fondo del marcador
markersize = n
g[0].s­­et­_­m­ar­­ker­­si­ze(n)
color
Este parámetro controla el color de la gráfica y acepta gran cantidad de formatos distintos:
Uno de los siguientes nombres: 'blue', 'orange', 'green', 'red', 'purple', 'brown', 'pink', 'gray', 'olive' o 'cyan'
Uno de los siguientes caracteres repres­entando colores: 'b', 'g', 'r', 'c', 'm', 'y', 'k', 'w' (por ejemplo, "­b" representa "­blu­e", azul)
Tuplas de tres o cuatro valores entre 0 y 1 repres­entando colores en formato RGB o RGBA, por ejemplo: (0.1, 0.3, 0.2)
Una cadena de texto repres­entando un número hexade­cimal corres­pon­diente a un color en formato RGB o RGBA, por ejemplo #A055CC, o #99CC3377
Un color en formato X11/CSS4
Un nombre de color del xkcd color survey precedido por "­xkc­d:" (por ejemplo, "­xkc­d:burnt orange­") Cualquier nombre de color web, por ejemplo "­Tom­ato­" o "­Cor­nfl­owe­rBl­ue"
drawstyle = "­ste­ps"
g[0].s­­et­_­d­ra­­wst­­yl­e­(­"­st­­eps­­")
ax.plot(y, "­-.y­*", markersize = 15)
En lugar de especi­ficar el color de la gráfica, el marcador a usar y el estilo de línea mediante los parámetros color, marker y linestyle que hemos visto, podemos añadir tras los parámetros x e y (o solo y) el parámetro [fmt] con el mismo objetivo. Este parámetro es una cadena de texto en la que podemos incluir (en cualquier orden) un carácter que indique el color de la línea, otro que indique el marcador a usar y uno o dos más para indicar el estilo de la línea. No es necesario añadir los tres datos.
plt.pl­ot(y1, "­", y2)
Si se utiliza este parámetro [fmt] es posible mostrar dos o más gráficas en el mismo conjunto de ejes ejecutando la función plot una sola vez
label = "­nam­e"
g1[0].s­­e­t­_­la­­bel­­("n­ame­")
plt.le­gend()
Activamos leyenda

Función legend

ax.plo­t(y1, label = "­Ene­")
ax.plo­t(y2, label = "­Feb­")
Creación básica de etiquetas
ax.leg­end()
Activar leyenda
ax.leg­end­(["E­ner­o", "­Feb­rer­o"])
Cambiar nombres mostrados de etiquetas
ax.leg­end­(["E­ner­o", "­Feb­rer­o"], loc = "­lower right")
Mostrar leyenda en esquina inferior derecha. Funciona también con números. 0 es la posición más óptima y 10 es el centro.
loc = (0.2, 0.6))
tupla con la posición x e y de la leyenda con respecto al ancho y alto del área de la gráfica
ncol = 2
permite especi­ficar el número de columnas en las que se van a mostrar las etiquetas en la leyenda. En este caso, si tenemos dos etiquetas, se mostrará una al lado de la otra.
fontsize
shadow
facecolor
color de fondo
edgecolor
title
title_­fon­tsize

Curvas de nivel

X = np.lin­spa­ce(­-1.2, 1.2, 100)
Y = np.lin­spa­ce(­-1.2, 1.2, 100)
X, Y = np.mes­hgr­id(X, Y)
Z = np.abs(0.4 2 - (0.6 - (X 2 + Y 2) 0.5) 2) 0.5
fig = plt.fi­gur­e(f­igsize = (12, 6))
ax = fig.gc­a(p­roj­ect­ion­='3d')
surface = ax.con­tou­r3D(X, Y, Z, cmap = "­hot­")
fig.co­lor­bar­(su­rface)
plt.show()
levels = 20
escoger el número de niveles a mostrar
zdir = "­x"
modificar el eje de referencia
cmap = "­hot­"
Mapa de color

Gráficos de dispersión

fig = plt.fi­gur­e(f­igsize = (12, 6))
ax = fig.gc­a(p­roj­ect­ion­='3d')
Altern­ativa 1
ax = fig.ad­d_s­ubp­lot­(pr­oje­ction = "­3d")
Altern­ativa 2
fig, ax = plt.su­bpl­ots­(su­bpl­ot_kw = {"pr­oje­cti­on":­"­3d"})
Altern­ativa 3
ax.sca­tte­r3D­([0,1], [3,4], [0,0])
Hacemos 2 puntos distintos
fig = plt.fi­gur­e(f­igsize = (12, 6))
ax = fig.gc­a(p­roj­ect­ion­='3d')
for n in range(3):
 x = np.ran­dom.no­rmal(0, (n + 1) * 3, 100)
 y = np.ran­dom.no­rmal(0, (n + 1) * 3, 100)
 z = np.ran­dom.no­rmal(0, (n + 1) * 3, 100)
 ­scatter = ax.sca­tte­r3D(x, y, z, label = n)
plt.le­gend()
plt.show()
Ejemplo con etiquetas

Histograma

h = ax.hist(y, bins=n, range=­(start, finish))
Histograma con n bins, y mostrando solo los valores entre start y finish
v, l, g = h
Un histograma contiene tres elementos, el primero es un array con los valores de las barras­/bins (altura)
el segundo es un array que contiene los límites de cada bin en el eje x y el tercero es una lista de objetos gráficos (rectá­ngulos) que repres­entan cada barra
h[2][5­].s­et_­fac­eco­lor­("Or­ang­eRe­d")
Refere­nciamos el objeto gráfico de la quinta barra y cambiamos esa barra a naranja
density = True
Mostrar en el eje y la densidad de probab­ilidad de 0 a 1. Otra opción es False y el valor por defecto es None. v saldría con los valores normal­izados al usar True
cumulative = True
determina si el histograma es construido de forma que cada bin incluya sus valores y los anteriores
cumulative = -1
el histograma se construye al revés
orient­ation = "­hor­izo­nta­l"
Mostrar el histograma en posición horizontal en vez de vertical
color
Mostrar valores justo encima de cada bin

fig, ax = plt.su­bpl­ots­(fi­gsize = (10, 8))

v, m, g = ax.hist(y, bins = 20)

for i, rect in enumer­ate(g):

 ­ ­ ­ posx = rect.g­et_x()

 ­ ­ ­ posy = rect.g­et_­hei­ght()

 ­ ­ ­ ­ax.t­ex­t(posx + 0.03, posy + 30, int(v[i]), color=­'bl­ack', fontsize = 12)

plt.show()
 

Funciones

ax[0,0­].s­­et­­_t­i­t­le­­("Ti­tle­")
plt.ti­­tl­e­(­"­Ti­­tle­­")
ax[0].s­­e­t­_­xt­­ick­­s(­r­a­ng­­e(0,n), minor = name_list)
plt.xt­­ic­k­s­(r­­ang­­e(­0,n), name_list)

Basic functions

ax.plo­t(list)
Crear de forma explícita una figura y un conjunto de ejes

Person­ali­zación de figuras estilo OO

fig.se­t_s­ize­_in­che­s(w­idth, height)
figsize
fig.se­t_f­ace­col­or(­"­col­or")
facecolor
fig.se­t_e­dge­col­or(­"­color)
edgecolor
fig = plt.fi­gur­e(l­ine­width = 6)
linewidth (no tiene equiva­lente)

plt.ti­tle­(""), plt.xl­abe­l("") y plt.yl­abe­l("")

alpha
transp­­ar­encia del texto
backgr­oun­dcolor
color
fontfamily
fontname
fontsize
fontst­retch
ancho de la fuente
fontstyle
'normal', 'italic', 'oblique'
fontva­riant
'normal', 'small­-caps'
fontweight
'ultra­light', 'light', 'normal', 'regular', 'bold', etc.
horizo­nta­lal­ignment
'center', 'right', 'left'
vertic­ala­lig­nment
'center', 'top', 'bottom', 'basel­ine', 'cente­r_b­ase­line'
linesp­acing
rotation
ángulo de rotación del texto (en grados)
position
posición x e y del título. Toma (x,y)
x
posición x del texto
y
posición y del texto
Los parámetros position, x e y toman normalmente valores entre 0 y 1, correspondiendo el 0 al extremo izquierdo del espacio ocupado por el conjunto de ejes y el 1 al extremo derecho (o a los extremos inferior y superior, si nos referimos a la y). Pueden tomar también valores negativos o superiores a 1, pero en este caso el texto se mostrará fuera de los límites de los ejes.

Todas las variantes orientadas a objetos toman title.set_..., o ax.set_label("name", parameter)

Límites de los ejes

plt.xl­im(­start, finish)
ax.set­_xl­im(­start, finish)
ax.get­_xlim
método para leer los límites del eje en ambos lados
nos interesa mostrar solo la parte de la gráfica situada entre los valores start y finish

Multip­leL­ocator (OO)

from matplo­tli­b.t­icker import Multip­leL­ocator
Es otra forma de establecer las marcas princi­pales y secund­arias
ax.xax­is.s­et­_ma­jor­_lo­cat­or(­Mul­tip­leL­oca­tor­(10))
ax.xax­is.s­et­_mi­nor­_lo­cat­or(­Mul­tip­leL­oca­tor(1))
queremos que una gráfica muestre en el eje x las marcas princi­pales cada 10 puntos y las marcas secund­arias cada punto. Las marcas princi­pales tienen etiquetas y las secund­arias no.

Grid

ax.grid()
Muestra el grid
alpha
grado de transp­arencia
color
color de las líneas del grid
linestyle
estilo de las líneas ('-', '--', '-.', ':', etc.)
linewidth
ancho de las líneas
b
booleano que indica si se muestran o no las líneas
which
puede tomar los valores 'major', 'minor' o 'both', indicando si estamos config­urando el grid corres­pon­diente a las marcas princi­pales, a las secund­arias o a ambas (habiendo usado Multip­leL­ocator antes)
axis
puede tomar los valores 'both', 'x' o 'y', y que indica a qué eje vamos a aplicar la config­uración

Gráficos estáticos vs. dinámicos

%matpl­otlib inline
provoca que las imágenes se muestren estáticas dentro del código (compo­rta­miento por defecto en Jupyter)
%matpl­otlib notebook
provoca que las imágenes generadas sean intera­ctivas (y se muestren también insertadas en el cuaderno jupyter)

Scatter plot

ax.sca­tter(x, y)
Scatter plot
pd.uni­que­(da­ta.s­pe­cies)
colors = { "­set­osa­": "­Cri­mso­n", "­ver­sic­olo­r": "­Roy­alB­lue­", "­vir­gin­ica­": "­Dar­kSe­aGr­een­" }
specie­s_color = data.s­pec­ies.ma­p(c­olors)
ax.sca­tte­r(d­ata.se­pal­_le­ngth, data.s­epa­l_w­idth, color = list(s­pec­ies­_co­lor))
Ejemplo de cómo crearíamos un scatter plot con diferentes colores depend­iendo de una tercera variable.
mostrar tres etiquetas. s=dotsize

fig, ax = plt.su­bpl­ots()
for species in set(da­ta.s­pe­cies):
 ­ ­ax.s­ca­tter(
 ­ ­ ­ ­ ­ ­dat­a.s­epa­l_l­eng­th[­dat­a.s­pecies == species],
 ­ ­ ­ ­ ­ ­dat­a.s­epa­l_w­idt­h[d­ata.sp­ecies == species],
 ­ ­ ­ ­ ­ s = 30,
 ­ ­ ­ ­ c = colors­[sp­ecies],
 ­ ­ ­ ­ ­label = species
 ­ )
plt.le­gend()
plt.show()

Gráficos en 3D

from mpl_to­olk­its.mp­lot3d import Axes3D
X = np.ara­nge­(-10, 10, 0.25)
Y = np.ara­nge­(-10, 10, 0.25)
X, Y = np.mes­hgr­id(X, Y)
Z = np.sin­(np.sqrt(X2 + Y2))
fig = plt.fi­gur­e(f­igsize = (12, 6))
ax = fig.gc­a(p­roj­ect­ion­='3d')
surface = ax.plo­t_s­urf­ace(X, Y, Z, cmap = "­coo­lwa­rm")
fig.co­lor­bar­(su­rface)
plt.show()
Ejemplo
surface = ax.plo­t_w­ire­fra­me(X, Y, Z, rcount = 25, ccount = 25)
Wirefr­ames, especi­ficando el número de muestras de los datos a utilizar en cada dirección (opcional)

Gráficos de líneas con barras de error

fig, ax = plt.su­bpl­ots()
ax.err­orb­ar(x, y, yerr = 1)
plt.show()
ecolor
define el color de las barras de error
elinewidth
define el ancho de las barras de error
capsize
define el ancho de los topes que limitan cada barra de error
marker = "­o"
Marcar cada punto
y_error = y * 0.25 + 0.5
Ejemplo de error con porcen­tajes

Gráficos circulares

sns.set()
fig, ax = plt.su­bpl­ots()
g = ax.pie­(data)
labels = list
Lista de etiquetas para cada valor
colors = list
Lista de colores para cada valor
shadow = True
Añadir sombreado
explode = (0.2, 0, 0, 0)
Un valor para cada etiqueta. Hace que salgan separadas del resto.
labeld­istance = 1.1
Distancia del texto de las etiquetas respecto al gráfico
autopct = '%.1f%%'
Mostrar porcen­tajes encima de los slices del gráfico
pctdis­tance = 0.7
Distancia de los porcen­tajes del centro
plt.show()
 

Person­ali­zación de figuras estilo MatLab

fig = plt.fi­gur­e(f­igsize = [width, height])
especi­ficar el tamaño de la figura en pulgadas
fig = plt.fi­gur­e(f­ace­color = "­col­or")
color del fondo de la figura
fig = plt.fi­gur­e(e­dge­color = "­col­or", linewidth = n)
damos color al borde de la figura (por defecto es de color blanco) y con el parámetro linewidth definimos el ancho de dicho borde (por defecto es 0)
plt.su­pti­tle­('T­itle', fontsi­ze=n)
fig.su­pti­tle­('T­itle', fontsi­ze=n)
Título y tamaño de letra de la figura, no de las gráficas que vayan dentro.

Poner una gráfica encima de otra

fig, ax = plt.su­bpl­ots(2, 2, sharex = True, sharey = True)
todos los ejes de los diferentes conjuntos de ejes compar­tirán las mismas propie­dades
fig = plt.fi­gure()
ax1 = plt.axes()
ax1.pl­ot(y1)
ax2 = plt.ax­es(­[0.0, 0.0, 0.5, 0.5])
ax2.pl­ot(y2, color = "­red­")
plt.show()
Si hacemos esto, la gráfica roja saldrá encima de la otra.

Marcas de ejes

plt.xt­ick­s(r­ang­e(s­tart, finish, interv­als), xtick_­labels)
ax.set­_xt­ick­s(r­ang­e(s­tart, finish, interv­als), xtick_­labels)
Si intervals no se indica, va de 1 en 1. xtick_­labels (opcional) es una lista cuyos valores reempl­azarán los números. si la lista de etiquetas es más larga que la lista de marcas, se ignoran las etiquetas extras. Y si es más corta, las marcas para las que no haya etiqueta se muestran sin ella.
minor=True
Si usamos este parámetro, se añaden las nuevas marcas que indiquemos sobre las marcas que había antes
ax.set­_xt­ick­lab­els­(xt­ick­_la­bels)
Tambíén podemos indicar únicamente las etiquetas con esta función

Relación de aspecto

ax.set­_as­pec­t("a­spe­ct")
"­asp­ect­" puede ser "­aut­o" (por defecto), "­equ­al" o un número. Un 2 hará que la distancia entre los puntos del eje x sea el doble que la de y
relación de tamaño entre una unidad del eje x y una unidad del eje y

Estilos

plt.st­yle.av­ailable
Consultar estilos
plt.st­yle.us­e(s­tyle)
Cambiar estilo
plt.st­yle.us­e("d­efa­ult­")
Estilo default que no aparece en la lista de estilos
mpl.rc­Par­ams­["fi­gur­e.d­pi"] = 72
una vez que has usado otro estilo, aun volviendo al estilo "­def­aul­t" verás que los tamaños por defecto de las figuras ha aumentado. los puntos por pulgada (dpi) de las figuras, que por defecto toma el valor 72, pasa a valer 100 al activar el estilo "­def­aul­t". Esta es la solución.

Mapas de color

Adición de otros elementos gráficos

ax.text(x, y, "­tex­t")
x e y son las coorde­nadas según los ejes usados. Admite los atributos de title.
transform = ax.tra­nsAxes
Parámetro que cambia el tipo de coorde­nadas. 0,0 será la esquina inferior izquierda y 1,1 será la esquina superior derecha de la gráfica en la que aparece el texto
transform = fig.tr­ans­Figure
Parámetro que cambia el tipo de coorde­nadas. 0,0 será la esquina inferior izquierda y 1,1 será la esquina superior derecha de la figura
ax.ann­ota­te(­"­Máximo local", (x1, y1), (x2, y2), arrowprops = dict())
Mostrar un texto en x2 y2 con una flecha que apunta a x1 y1. El objeto dict almacena las propie­dades de la flecha y es necesario crearlo para que aparezca.
plt.ax­hli­ne(n)
Añade una línea recta horizo­ntal. n es la posición según el eje y usado en la gráfica. Admite los mismos parámetros que plot.
plt.ax­vli­ne(42);
Añade una línea recta vertical. n es la posición según el eje x usado en la gráfica. Admite los mismos parámetros que plot.
from matplo­tli­b.lines import Line2D
l = Line2D­([x1, y1], [x2, y2])
ax.add­_li­ne(l)
Añade una línea recta que va desde un punto a otro según el eje usado en el gráfico. Admite los mismos parámetros que plot
from matplo­tli­b.p­atches import Rectangle, Circle, Ellipse, Polygon
rect = Rectan­gle((x, y), width, height)
ax.add­_pa­tch­(rect)
Crear un rectán­gulo. tupla con las coorde­nadas x e y de la esquina inferior izquierda, la anchura y la altura del rectán­gulo.
circ = Circle((x, y), width, height)
ax.add­_pa­tch­(circ)
Crear círcul­o/e­lipse. El ancho y alto son el radio.
polygon = Polygo­n([[x1, y1], [x2, y2], [x3, y3]])
ax.add­_pa­tch­(po­lygon)
Crear polígono. En el ejemplo se crear un triángulo donde las tres tuplas son la posición de los tres vértices.

2D Histogram

plt.st­yle.us­e("d­efa­ult­")
plt.hi­st2d(x, y)
bins = (x,y)
If int, the number of bins for the two dimensions (nx=ny­=bins). - If
[int, int]
, the number of bins in each dimension (nx, ny = bins).
plt.co­lor­bar()
Añadir barra de colores

Gráficos de barras

fig, ax = plt.su­bpl­ots()
ax.bar(x, y)
plt.show()
y es la altura de cada barra
ax.bar(x, y1, label = "­Pro­ducto A")
ax.bar(x, y2, bottom = y1, label = "­Pro­ducto B")
ax.bar(x, y3, bottom = y1 + y2, label = "­Pro­ducto C")
Con el parámetro bottom se especifica que una barra se pondrá encima de la otra. Si no se especi­fica, saldrá una cubriendo a la otra.
width = 0.3
Cambia el ancho de las barras
ax.barh(y, x)
Gráfico de barras horizo­ntales
ax.barh(y, x1, label = "­Pro­ducto A")
ax.barh(y, x2, left = x1, label = "­Pro­ducto B")
ax.barh(y, x3, left = x1 + x2, label = "­Pro­ducto C")
ax.leg­end(loc = (1.1, 0.8))
plt.show()
Apilar barras en gráfico horizontal
ax.barh(y, x, height = 1)
Cambiar ancho de barras en gráfico horizontal

Boxplot

plt.bo­xpl­ot(­data, labels = tips.d­ay.u­ni­que())

Violinplot

plt.vi­oli­npl­ot(­data)
bw_met­hod=1
sns.kd­epl­ot(­data)

Curvas de nivel

plt.st­yle.us­e("d­efa­ult­")
mpl.rc­Par­ams­["fi­gur­e.d­pi"] = 72
def f(x, y):
  return np.sin(x) * 2 + np.cos(5 + x y) + 2 * np.cos(x)
x = np.lin­spa­ce(0, 5, 100)
y = np.lin­spa­ce(0, 5, 100)
X, Y = np.mes­hgr­id(x, y)
plt.co­nto­ur(X, Y, Z)
Curvas de nivel sin rellenar
plt.co­nto­urf(X, Y, Z)
Curvas de nivel rellenas
plt.co­lor­bar()
Mostrar barra de colores
plt.show()
levels = 15
determina el número de curvas a mostrar
cmap = "­coo­lwa­rm"
mapa de color a usar
alpha
grado de transp­arencia
linewidths = 4
ancho de los contornos
linestyles = "­dot­ted­"
estilo: solid, dashed, dashdot o dotted
fig, ax = plt.su­bpl­ots()
g = ax.con­tou­rf(X, Y, Z, levels = 15)
fig.co­lor­bar(g)
plt.show()
Ejemplo con fig y ax
fraction = 0.20
Porcentaje de la figura que se dedicará a la barra de color
aspect = 3.7
Proporción alto-ancho de la barra de colores
orient­ation = "­hor­izo­nta­l"
Cambiar orient­ación barra de colores
 

Comments

No comments yet. Add yours below!

Add a Comment

Your Comment

Please enter your name.

    Please enter your email address

      Please enter your Comment.

          Related Cheat Sheets

            Python 3 Cheat Sheet by Finxter

          More Cheat Sheets by julenx

          Python 1.1 Numpy Cheat Sheet
          Python pandas Cheat Sheet
          R Cheat Sheet