¿Hay alguna forma de trazar un diagrama de barras matplotlibutilizando 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_xticklabelsEs 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_labelhace 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_labelsimplemente 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