2011-06-28 61 views
7

Tôi đã sửa đổi ví dụ scatter_hist.py được tìm thấy here để có hai tập dữ liệu được vẽ.matplotlib scatter_hist với histiptpe stepfilled trong biểu đồ

Tôi muốn có biểu đồ với loại "stepfilled", nhưng bằng cách nào đó nếu tôi đặt loại "stepfilled" biểu đồ trục Y (orientation = "horizontal") không hoạt động.

Có cách nào khác để làm biểu đồ trông giống như kiểu "stepfilled" hay tôi đang làm gì đó sai?

Đây là mã của tôi với histtype = "bar" để hiển thị ý tưởng những gì tôi cố gắng làm. Thay đổi nó để

histtype="stepfilled" 

để có được biểu đồ kỳ lạ:

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

cảm ơn sự giúp đỡ!

Edit:

Dưới đây là những hình ảnh mà tôi nhận được trong cửa sổ môi trường với matplotlib 1.0.0. Với histtype = "thanh" Tôi có điều này:

bar histogram image http://i54.tinypic.com/wunjoi.png và với histtype = "stepfilled" Tôi có điều này:

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

Trả lời

2

Các documentation chỉ đề cập đến trường hợp đặc biệt cho nhiều dữ liệu khi sử dụng 'thanh 'và' barstacked ', mà tôi cho rằng có nghĩa là điều này không được triển khai đúng cho hai loại khác. Thay đổi mã của bạn để thêm nhiều biểu đồ thay vì chỉ một biểu đồ đã hoạt động cho tôi:

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

Cảm ơn bạn đã trả lời Henning. Phiên bản matplotlib của bạn là gì và bạn có đang chạy nó trên các cửa sổ không? – Tedmu

+0

Tôi đang chạy phiên bản matplotlib 1.0.0 trong python 2.6.6 trên windows 7 – Henning

Các vấn đề liên quan