pyplot example python matplotlib

example - python matplotlib mĂșltiples barras



plot title python (4)

Cómo trazar múltiples barras en matplotlib, cuando traté de llamar a la función de barra varias veces, se superponen y, como se ve en la figura siguiente, solo se puede ver el valor rojo más alto. ¿Cómo puedo trazar las barras múltiples con fechas en los ejes x?

Hasta ahora, he intentado esto:

import matplotlib.pyplot as plt import datetime x = [datetime.datetime(2011, 1, 4, 0, 0), datetime.datetime(2011, 1, 5, 0, 0), datetime.datetime(2011, 1, 6, 0, 0)] y = [4, 9, 2] z=[1,2,3] k=[11,12,13] ax = plt.subplot(111)![enter image description here][1] ax.bar(x, y,width=0.5,color=''b'',align=''center'') ax.bar(x, z,width=0.5,color=''g'',align=''center'') ax.bar(x, k,width=0.5,color=''r'',align=''center'') ax.xaxis_date() plt.show()

Tengo esto:

Los resultados deberían ser algo así como, pero con las fechas están en los ejes x y las barras están una al lado de la otra:


El problema con el uso de fechas como valores x es que si quieres un gráfico de barras como en tu segunda imagen, van a estar equivocados. Usted debe usar un gráfico de barras apiladas (colores uno encima del otro) o grupo por fecha (una fecha "falsa" en el eje x, básicamente solo agrupando los puntos de datos).

import numpy as np import matplotlib.pyplot as plt N = 3 ind = np.arange(N) # the x locations for the groups width = 0.27 # the width of the bars fig = plt.figure() ax = fig.add_subplot(111) yvals = [4, 9, 2] rects1 = ax.bar(ind, yvals, width, color=''r'') zvals = [1,2,3] rects2 = ax.bar(ind+width, zvals, width, color=''g'') kvals = [11,12,13] rects3 = ax.bar(ind+width*2, kvals, width, color=''b'') ax.set_ylabel(''Scores'') ax.set_xticks(ind+width) ax.set_xticklabels( (''2011-Jan-4'', ''2011-Jan-5'', ''2011-Jan-6'') ) ax.legend( (rects1[0], rects2[0], rects3[0]), (''y'', ''z'', ''k'') ) def autolabel(rects): for rect in rects: h = rect.get_height() ax.text(rect.get_x()+rect.get_width()/2., 1.05*h, ''%d''%int(h), ha=''center'', va=''bottom'') autolabel(rects1) autolabel(rects2) autolabel(rects3) plt.show()


Hice esta solución: si quieres trazar más de un gráfico en una figura, asegúrate de que antes de trazar las siguientes gráficas hayas ajustado right matplotlib.pyplot.hold(True) para poder agregar otras gráficas.

Acerca de los valores de fecha y hora en X ax, la solución que usa la alineación de barras funciona para mí. Cuando crea otro gráfico de barras con matplotlib.pyplot.bar() , simplemente use align=''edge|center'' y establezca width=''+|-distance'' .

Cuando establece todas las barras (gráficos) a la derecha, verá las barras bien.


Usa una estructura de datos 2D y deja que matplotlib maneje tu espacio entre columnas:

import numpy as np import matplotlib.pyplot as plt x = np.random.randn(1000, 3) bins = np.arange(-4.5, 4.5, 1) colors = [''red'', ''tan'', ''lime''] plt.hist(x, bins=bins, color=colors, label=colors) plt.legend() plt.xticks(bins + 0.5, [''bin '' + str(int(x)) for x in (bins + 0.5)]) plt.show()

rwidth = 1 argumento en hist() eliminará cualquier espacio entre las barras.

Source


import matplotlib.pyplot as plt from matplotlib.dates import date2num import datetime x = [datetime.datetime(2011, 1, 4, 0, 0), datetime.datetime(2011, 1, 5, 0, 0), datetime.datetime(2011, 1, 6, 0, 0)] x = date2num(x) y = [4, 9, 2] z=[1,2,3] k=[11,12,13] ax = plt.subplot(111) ax.bar(x-0.2, y,width=0.2,color=''b'',align=''center'') ax.bar(x, z,width=0.2,color=''g'',align=''center'') ax.bar(x+0.2, k,width=0.2,color=''r'',align=''center'') ax.xaxis_date() plt.show()

No sé qué significa "valores y se superponen", ¿el siguiente código resuelve tu problema?

ax = plt.subplot(111) w = 0.3 ax.bar(x-w, y,width=w,color=''b'',align=''center'') ax.bar(x, z,width=w,color=''g'',align=''center'') ax.bar(x+w, k,width=w,color=''r'',align=''center'') ax.xaxis_date() ax.autoscale(tight=True) plt.show()