python - barplot - seaborn tutorial
Las parcelas nacidas no aparecen (7)
Esto funciono para mi
import matplotlib.pyplot as plt
import seaborn as sns
.
.
.
plt.show(sns)
Estoy seguro de que estoy olvidando algo muy simple, pero no puedo conseguir que ciertas parcelas funcionen con Seaborn.
Si lo hago:
import seaborn as sns
Luego, todas las parcelas que creo como de costumbre con matplotlib obtienen el estilo Seaborn (con la cuadrícula gris en el fondo).
Sin embargo, si trato de hacer uno de los ejemplos, como:
In [1]: import seaborn as sns
In [2]: sns.set()
In [3]: df = sns.load_dataset(''iris'')
In [4]: sns.pairplot(df, hue=''species'', size=2.5)
Out[4]: <seaborn.axisgrid.PairGrid at 0x3e59150>
La función pairplot devuelve un objeto PairGrid, pero el gráfico no aparece.
Estoy un poco confundido porque matplotlib parece estar funcionando correctamente, y los estilos Seaborn se aplican a otros gráficos de matplotlib, pero las funciones Seaborn no parecen hacer nada. ¿Alguien tiene alguna idea de cuál podría ser el problema?
Las parcelas creadas con seaborn deben mostrarse como parcelas matplotlib normales. Esto se puede hacer usando el
plt.show()
función de matplotlib.
Originalmente publiqué la solución para usar el objeto matplotlib ya importado de seaborn (
sns.plt.show()
), sin embargo, esto se considera una mala práctica.
Por lo tanto, simplemente importe directamente el módulo
matplotlib.pyplot
y muestre sus parcelas con
import matplotlib.pyplot as plt
plt.show()
Si se usa el cuaderno IPython, se puede invocar el backend en línea para eliminar la necesidad de llamar a show después de cada diagrama. La magia respectiva es
%matplotlib inline
Llego a esta pregunta con bastante frecuencia y siempre me lleva un tiempo encontrar lo que busco:
import seaborn as sns
import matplotlib.pyplot as plt
plt.show() # <--- This is what you are looking for
Tenga en cuenta: en Python 2, también puede usar
sns.plt.show()
, pero no en Python 3.
Ejemplo completo
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Visualize C_0.99 for all languages except the 10 with most characters."""
import seaborn as sns
import matplotlib.pyplot as plt
l = [41, 44, 46, 46, 47, 47, 48, 48, 49, 51, 52, 53, 53, 53, 53, 55, 55, 55,
55, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58,
58, 59, 59, 59, 59, 59, 59, 59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62, 62, 62,
62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 65,
65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66,
67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 69, 69, 69, 70, 70,
70, 70, 71, 71, 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73,
74, 74, 74, 74, 74, 75, 75, 75, 76, 77, 77, 78, 78, 79, 79, 79, 79, 80,
80, 80, 80, 81, 81, 81, 81, 83, 84, 84, 85, 86, 86, 86, 86, 87, 87, 87,
87, 87, 88, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 92,
92, 93, 93, 93, 94, 95, 95, 96, 98, 98, 99, 100, 102, 104, 105, 107, 108,
109, 110, 110, 113, 113, 115, 116, 118, 119, 121]
sns.distplot(l, kde=True, rug=False)
plt.show()
Da
Mi consejo es solo dar un
plt.figure()
y da un poco de trama sns.
Por ejemplo
sns.distplot(data)
.
Aunque parecerá que no muestra ninguna trama, cuando maximice la figura, podrá ver la trama.
Para evitar confusiones (como parece haber algo en los comentarios). Asumiendo que estás en Jupyter:
%matplotlib inline
> muestra los gráficos
DENTRO
del cuaderno
sns.plt.show()
> muestra las parcelas
FUERA
del cuaderno
%matplotlib inline
sns.plt.show()
en el sentido de que los gráficos se mostrarán
en
el cuaderno incluso cuando se
sns.plt.show()
.
Y sí, es fácil incluir la línea en su configuración:
Ejecute automáticamente% matplotlib en línea en IPython Notebook
Pero parece una mejor convención para mantenerlo junto con las importaciones en el código real.
Por el estilo de su fragmento de código, supongo que estaba usando IPython en lugar de Jupyter Notebook.
En este
issue
en GitHub, un miembro de IPython dejó claro en 2016 que la visualización de gráficos solo funcionaría cuando "solo funciona cuando es un núcleo de Jupyter".
Por lo tanto, el
%matplotlib inline
no funcionaría.
Estaba teniendo el mismo problema y le sugiero que use Jupyter Notebook para la visualización.
Si traza en la
consola IPython
(donde no puede usar
%matplotlib inline
) en lugar del cuaderno Jupyter, y no desea ejecutar
plt.show()
repetidamente, puede iniciar la consola IPython con
ipython --pylab
:
$ ipython --pylab
Python 3.6.6 |Anaconda custom (64-bit)| (default, Jun 28 2018, 17:14:51)
Type ''copyright'', ''credits'' or ''license'' for more information
IPython 7.0.1 -- An enhanced Interactive Python. Type ''?'' for help.
Using matplotlib backend: Qt5Agg
In [1]: import seaborn as sns
In [2]: tips = sns.load_dataset("tips")
In [3]: sns.relplot(x="total_bill", y="tip", data=tips) # you can see the plot now