web-dev-qa-db-fra.com

Impossible d'obtenir l'histogramme pour afficher les bacs séparés avec des lignes verticales

Problème étrange ennuyeux et je n'ai pas encore trouvé de solution sur ce site (bien que la question soit apparue)

J'essaie de faire un histogramme où les bacs ont le "style de barre" où les lignes verticales séparent chaque bac, mais peu importe ce que je change le constructeur du type d'histogramme pour obtenir un histogramme rempli par étapes.

Voici mon code. Remarque J'utilise un ordinateur portable jupyter installé via anaconda avec python version 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() 

C'est tout et j'obtiens un diagramme rempli d'étapes sans lignes verticales séparant les barres. Ce qui est ennuyeux, c'est que je n'ai pas eu ce problème il y a quelque temps, quelque chose a clairement changé et je ne sais pas quoi. J'ai également essayé histype = 'barstacked'. Merci de votre aide

enter image description here

14
Canuck

En utilisant votre exemple:

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() 

Ce qui produit l'image suivante:

enter image description here

La principale différence est l'utilisation de l'argument de mot clé ec. C'est l'abréviation de "edgecolor". Dans la documentation de plt.hist il indique qu'en plus de tous les arguments de mots clés répertoriés, plt.hist prend également des arguments de mots clés pour l'initialiseur Patch. edgecolor est l'un de ces arguments de mots clés. C'est pourquoi il n'est pas explicitement répertorié dans la documentation de plt.hist. Toutes les barres du tracé sont un objet Patch individuel, vous dites donc que vous voulez que toutes les barres soient dessinées avec un contour noir (ou edgecolor dans le jargon matplotlib).

30
ngoldbaum