Problema extraño molesto y aún no he podido encontrar una solución en este sitio (aunque ha aparecido la pregunta)
Estoy tratando de hacer un histograma donde los contenedores tienen el 'estilo de barra' donde las líneas verticales separan cada contenedor, pero no importa lo que cambie el constructor de histtype para obtener un histograma lleno de pasos.
Aquí está mi código. Tenga en cuenta que estoy usando jupyter notebook instalado a través de anaconda con python versión 2.7.6
import numpy as np import matplotlib.pyplot as plt x = np.random.rand((100)) bins = np.linspace(0, 2, 40) plt.title('Relative Amplitude',fontsize=30) plt.xlabel('Random Histogram') plt.ylabel('Frequency',fontsize=30) plt.hist(x, bins, alpha=0.5, histtype='bar') plt.legend(loc='upper right',fontsize=30) plt.xticks(fontsize = 20) plt.yticks(fontsize = 20) plt.show()Eso es todo y obtengo un diagrama lleno de pasos sin líneas verticales que separen las barras. Lo que es molesto es que no tuve este problema hace un tiempo, algo claramente ha cambiado y no sé qué. También probé histype = 'barstacked'. Gracias amablemente por su ayuda
Usando tu ejemplo:
import numpy as np import matplotlib.pyplot as plt x = np.random.rand((100)) bins = np.linspace(0, 2, 40) plt.title('Relative Amplitude',fontsize=30) plt.xlabel('Random Histogram') plt.ylabel('Frequency',fontsize=30) plt.hist(x, bins, alpha=0.5, histtype='bar', ec='black') plt.legend(loc='upper right',fontsize=30) plt.xticks(fontsize = 20) plt.yticks(fontsize = 20) plt.show()Lo que produce la siguiente imagen:
La diferencia clave es el uso del argumento de palabra clave ec . Esta es la abreviatura de "color de borde". En la documentación de plt.hist dice que, además de todos los argumentos de palabras clave enumerados, plt.hist también toma argumentos de palabras clave para el inicializador de Patch . edgecolor es uno de esos argumentos de palabras clave. Es por eso que no aparece explícitamente en la documentación de plt.hist . Todas las barras en el gráfico son un objeto Patch individual, por lo que está diciendo que desea que todas las barras se dibujen con un contorno negro (o color de borde en la jerga de edgecolor ).
Funciona para mí si le doy diferentes colores al argumento edgecolor y al argumento color . Por ejemplo:
import numpy as np import matplotlib.pyplot as plt x = np.random.rand((100)) bins = np.linspace(0, 2, 40) plt.title('Relative Amplitude',fontsize=30) plt.xlabel('Random Histogram') plt.ylabel('Frequency',fontsize=30) plt.hist(x, bins, alpha=0.5,edgecolor='black',color='steelblue', histtype='bar') plt.legend(loc='upper right',fontsize=30) plt.xticks(fontsize = 20) plt.yticks(fontsize = 20) plt.show()Puede usar el parámetro rwidth en plt.hist . Tenga en cuenta que estoy usando matplotlib versión '3.4.2'.
rwidth: flotante o Ninguno, predeterminado: Ninguno El ancho relativo de las barras como una fracción del ancho del contenedor. Si no hay, calcula automáticamente el ancho.
import numpy as np import matplotlib.pyplot as plt x = np.random.rand((100)) bins = np.linspace(0, 2, 40) plt.title('Relative Amplitude',fontsize=30) plt.xlabel('Random Histogram', fontsize=30) plt.ylabel('Frequency',fontsize=30) plt.hist(x, bins, rwidth=0.6, alpha=0.5, histtype='bar')# rwidth specify the width of the bars # rwidth is an number between 0 and 1 plt.xticks(fontsize=15) plt.yticks(fontsize=15) plt.xlim(0,1) plt.show()