2011-06-28 19 views
7

में stepfilled histtype के साथ matplotlib scatter_hist मैंने दो डेटा सेट प्लॉट करने के लिए here संशोधित scatter_hist.py उदाहरण को संशोधित किया।हिस्टोग्राम

मैं "stepfilled" प्रकार के साथ हिस्टोग्राम रखना चाहता हूं, लेकिन किसी भी तरह से अगर मैं "stepfilled" प्रकार सेट करता हूं तो वाई-अक्ष हिस्टोग्राम (अभिविन्यास = "क्षैतिज") काम नहीं कर रहा है।

क्या "stepfilled" जैसी शैली देखने के लिए हिस्टोग्राम करने का कोई अन्य तरीका है या क्या मैं कुछ गलत कर रहा हूं?

यह विचार दिखाने के लिए कि मैं क्या करने का प्रयास करता हूं, यहां हिस्टटाइप = "बार" के साथ मेरा कोड है। अजीब हिस्टोग्राम पाने के लिए

histtype="stepfilled" 

के लिए इसे बदल:

import numpy as np 
import matplotlib.pyplot as plt 

# the random data 
x = np.random.randn(1000) 
y = np.random.randn(1000) 

x_vals = [x] 
y_vals = [y] 
x_vals.append(np.random.randn(300)) 
y_vals.append(np.random.randn(300)) 

fig = plt.figure(1, figsize=(5.5,5.5)) 

from mpl_toolkits.axes_grid1 import make_axes_locatable 

colour_LUT = ['#0000FF', 
       '#00FF00'] 

# the scatter plot: 
xymax = np.max(np.fabs(x)) 
colors = [] 
axScatter = plt.subplot(111) 
for i in range(len(x_vals)): 
    colour = colour_LUT[i] 
    xymax = np.max([np.max(np.fabs(x)), np.max(np.fabs(y)), xymax ]) 
    axScatter.scatter(x_vals[i], y_vals[i], color = colour) 
    colors.append(colour) 

axScatter.set_aspect(1.) 

# create new axes on the right and on the top of the current axes 
# The first argument of the new_vertical(new_horizontal) method is 
# the height (width) of the axes to be created in inches. 
divider = make_axes_locatable(axScatter) 
axHistx = divider.append_axes("top", 1.2, pad=0.1, sharex=axScatter) 
axHisty = divider.append_axes("right", 1.2, pad=0.1, sharey=axScatter) 

# make some labels invisible 
plt.setp(axHistx.get_xticklabels() + axHisty.get_yticklabels(), 
     visible=False) 

# now determine nice limits by hand: 
binwidth = 0.25 

lim = (int(xymax/binwidth) + 1) * binwidth 

bins = np.arange(-lim, lim + binwidth, binwidth) 
histtype = "bar" 
axHistx.hist(x_vals, bins=bins, histtype= histtype, color=colors) 
axHisty.hist(y_vals, bins=bins, orientation='horizontal',histtype= histtype, color=colors) 

# the xaxis of axHistx and yaxis of axHisty are shared with axScatter, 
# thus there is no need to manually adjust the xlim and ylim of these 
# axis. 

#axHistx.axis["bottom"].major_ticklabels.set_visible(False) 
for tl in axHistx.get_xticklabels(): 
    tl.set_visible(False) 
axHistx.set_yticks([0, 50, 100]) 

#axHisty.axis["left"].major_ticklabels.set_visible(False) 
for tl in axHisty.get_yticklabels(): 
    tl.set_visible(False) 
axHisty.set_xticks([0, 50, 100]) 

plt.draw() 
plt.show() 

मदद के लिए धन्यवाद!

संपादित करें:

यहां छवियों जो मैं matplotlib 1.0.0 के साथ खिड़कियां वातावरण में प्राप्त करते हैं। histtype = "बार" के साथ मैं इस है:

bar histogram image http://i54.tinypic.com/wunjoi.png और histtype साथ = "stepfilled" मैं इस है:

stepfilled histogram image http://oi56.tinypic.com/rstu1j.jpg

उत्तर

2

documentation का उपयोग करते समय केवल एक से अधिक डेटा के लिए विशेष मामलों का उल्लेख है 'बार 'और' बार्स्टैक ', जिसे मैं मानता हूं इसका मतलब है कि यह अन्य दो प्रकारों के लिए उचित रूप से लागू नहीं किया गया है। मेरे लिए केवल एक काम करने के बजाए एकाधिक हिस्टोग्राम जोड़ने के लिए अपना कोड बदलना:

histtype = "stepfilled" 
for i in xrange(len(x_vals)): 
    axHistx.hist(x_vals[i], bins=bins, histtype= histtype, color=colors[i]) 
    axHisty.hist(y_vals[i], bins=bins, orientation='horizontal',histtype= histtype, color=colors[i]) 
+0

हेनिंग के उत्तर के लिए धन्यवाद। Matplotlib का आपका संस्करण क्या है और क्या आप इसे विंडोज़ पर चला रहे हैं? – Tedmu

+0

मैं विंडोज 7 पर पायथन 2.6.6 में matplotlib संस्करण 1.0.0 चला रहा हूँ – Henning

संबंधित मुद्दे