scatter_matrix plotting multiple kind from python matplotlib plot pandas dataframe

plotting - plot histogram dataframe python



Anotar barras con valores en parcelas de barras Pandas (2)

Estoy buscando una forma de anotar mis barras en un diagrama de barra Pandas con los valores (redondeados) en mi DataFrame.

>>> df=pd.DataFrame({''A'':np.random.rand(2),''B'':np.random.rand(2)},index=[''value1'',''value2''] ) >>> df A B value1 0.440922 0.911800 value2 0.588242 0.797366

Me gustaría obtener algo como esto:

Intenté con esto, pero las anotaciones están todas centradas en los xthicks:

>>> ax = df.plot(kind=''bar'') >>> for idx, label in enumerate(list(df.index)): for acc in df.columns: value = np.round(df.ix[idx][acc],decimals=2) ax.annotate(value, (idx, value), xytext=(0, 15), textcoords=''offset points'')


Lo obtiene directamente de los parches de los ejes:

In [35]: for p in ax.patches: ax.annotate(str(p.get_height()), (p.get_x() * 1.005, p.get_height() * 1.005))

Deberá ajustar el formato de cadena y los desplazamientos para centrar las cosas, tal vez usar el ancho de p.get_width() , pero eso debería p.get_width() a comenzar. Puede que no funcione con barras de barras apiladas a menos que rastree los desplazamientos en algún lugar.


Solución que maneja también valores negativos con formato flotador de muestra.

Todavía necesita ajustar las compensaciones.

df=pd.DataFrame({''A'':np.random.rand(2)-1,''B'':np.random.rand(2)},index=[''val1'',''val2''] ) ax = df.plot(kind=''bar'', color=[''r'',''b'']) x_offset = -0.03 y_offset = 0.02 for p in ax.patches: b = p.get_bbox() val = "{:+.2f}".format(b.y1 + b.y0) ax.annotate(val, ((b.x0 + b.x1)/2 + x_offset, b.y1 + y_offset))