¿Hay alguna forma de trazar un diagrama de barras matplotlib
utilizando datos directamente de un dictado?
Mi dictado se ve así:
D = {u'Label1':26, u'Label2': 17, u'Label3':30}
Yo estaba esperando
fig = plt.figure(figsize=(5.5,3),dpi=300)
ax = fig.add_subplot(111)
bar = ax.bar(D,range(1,len(D)+1,1),0.5)
para trabajar, pero no lo hace.
Aquí está el error:
>>> ax.bar(D,range(1,len(D)+1,1),0.5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 4904, in bar
self.add_patch(r)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1570, in add_patch
self._update_patch_limits(p)
File "/usr/local/lib/python2.7/site-packages/matplotlib/axes.py", line 1588, in _update_patch_limits
xys = patch.get_patch_transform().transform(vertices)
File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 580, in get_patch_transform
self._update_patch_transform()
File "/usr/local/lib/python2.7/site-packages/matplotlib/patches.py", line 576, in _update_patch_transform
bbox = transforms.Bbox.from_bounds(x, y, width, height)
File "/usr/local/lib/python2.7/site-packages/matplotlib/transforms.py", line 786, in from_bounds
return Bbox.from_extents(x0, y0, x0 + width, y0 + height)
TypeError: coercing to Unicode: need string or buffer, float found
python
matplotlib
plot
otmezger
fuente
fuente
ax.bar(D,range(1,len(D)+1,1),0.5)
el primer argumento debe haber una lista de números, en su casoD.values()
.Respuestas:
Puede hacerlo en dos líneas trazando primero el gráfico de barras y luego configurando los ticks apropiados:
Tenga en cuenta que la penúltima línea debe leerse
plt.xticks(range(len(D)), list(D.keys()))
en python3, porqueD.keys()
devuelve un generador, que matplotlib no puede usar directamente.fuente
ax.set_xticklabels
Es un poco más simple de lo que sugieren la mayoría de las respuestas aquí:
fuente
Para referencia futura, el código anterior no funciona con Python 3. Para Python 3,
D.keys()
es necesario convertirlo en una lista.fuente
La mejor forma de implementarlo es usar
matplotlib.pyplot.bar(range, height, tick_label)
donde el rango proporciona valores escalares para el posicionamiento de la barra correspondiente en el gráfico.tick_label
hace el mismo trabajo quexticks()
. También se puede reemplazar con un número entero y usar variosplt.bar(integer, height, tick_label)
. Para obtener información detallada, consulte la documentación .Además, se puede generar el mismo gráfico sin usar
range()
. Pero el problema encontrado fue quetick_label
simplemente funcionó para la últimaplt.bar()
llamada. Porxticks()
lo tanto, se utilizó para etiquetar:fuente
A menudo cargo el dictado en un DataFrame de pandas y luego uso la función de trazado del DataFrame.
Aquí está el resumen:
fuente
Por qué no solo:
fuente