Je voudrais créer l'histogramme suivant (voir image ci-dessous) tiré du livre "Think Stats". Cependant, je ne peux pas les avoir sur le même terrain. Chaque DataFrame prend sa propre sous-parcelle.
J'ai le code suivant:
import nsfg
import matplotlib.pyplot as plt
df = nsfg.ReadFemPreg()
preg = nsfg.ReadFemPreg()
live = preg[preg.outcome == 1]
first = live[live.birthord == 1]
others = live[live.birthord != 1]
#fig = plt.figure()
#ax1 = fig.add_subplot(111)
first.hist(column = 'prglngth', bins = 40, color = 'teal', \
alpha = 0.5)
others.hist(column = 'prglngth', bins = 40, color = 'blue', \
alpha = 0.5)
plt.show()
Le code ci-dessus ne fonctionne pas lorsque j'utilise ax = ax1 comme suggéré dans: pandas. Plusieurs parcelles ne fonctionnent pas comme hists . Cet exemple ne fait pas ce dont j'ai besoin: Superposition de plusieurs histogrammes à l'aide de pandas . Lorsque j'utilise le code tel quel, il crée deux fenêtres avec des histogrammes. Des idées comment les combiner?
Voici un exemple de ce que j'aimerais que le chiffre final ressemble:
Autant que je sache, les pandas ne peuvent pas gérer cette situation. Ce n'est pas grave, car toutes leurs méthodes de traçage ne sont utilisées que par commodité. Vous devrez utiliser matplotlib directement. Voici comment je le fais:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas
#import seaborn
#seaborn.set(style='ticks')
np.random.seed(0)
df = pandas.DataFrame(np.random.normal(size=(37,2)), columns=['A', 'B'])
fig, ax = plt.subplots()
a_heights, a_bins = np.histogram(df['A'])
b_heights, b_bins = np.histogram(df['B'], bins=a_bins)
width = (a_bins[1] - a_bins[0])/3
ax.bar(a_bins[:-1], a_heights, width=width, facecolor='cornflowerblue')
ax.bar(b_bins[:-1]+width, b_heights, width=width, facecolor='seagreen')
#seaborn.despine(ax=ax, offset=10)
Et cela me donne:
Sur le site web des pandas ( http://pandas.pydata.org/pandas-docs/stable/visualization.html#visualization-hist ):
df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000),
'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
plt.figure();
df4.plot(kind='hist', alpha=0.5)
Si quelqu'un veut tracer un histogramme sur un autre (plutôt que des barres alternées), vous pouvez simplement appeler .hist()
consécutivement sur la série que vous souhaitez tracer:
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import pandas
np.random.seed(0)
df = pandas.DataFrame(np.random.normal(size=(37,2)), columns=['A', 'B'])
df['A'].hist()
df['B'].hist()
Cela vous donne:
Notez que l'ordre que vous appelez .hist()
est important (le premier sera à l'arrière)
Voici l'extrait de code. Dans mon cas, j'ai explicitement spécifié les bacs et la plage, car je ne gérais pas la suppression des valeurs aberrantes en tant qu'auteur du livre.
fig, ax = plt.subplots()
ax.hist([first.prglngth, others.prglngth], 10, (27, 50), histtype="bar", label=("First", "Other"))
ax.set_title("Histogram")
ax.legend()
Reportez-vous au graphique multihiste Matplotlib avec différentes tailles exemple .