2012-01-03 22 views
7

Tôi đã tạo ra biểu đồ thanh mà trông như thế này:Barh matplotlib tạo khoảng cách rung rinh giữa thanh

enter image description here

ý rằng khoảng cách thẳng đứng trên nhãn không đồng đều vì một lý do; Tôi không chắc chắn nếu điều này đã làm với cách tôi đã chỉ định ve hoặc bất cứ cơ chế thực sự đặt văn bản. Mã có liên quan:

height_factor = 40.0 
ind = np.linspace(0,len(sorted_totals)*height_factor,num=len(sorted_totals)) 
width = 0.25 
fig = plt.figure(figsize=(15.5, 8.75),dpi=300) 
p1 = plt.barh(ind,map(int,sorted_composite[:,0]),color='blue',align='center',height=height_factor) 
p1 = plt.barh(ind,map(int,sorted_composite[:,2]),color=(0.75,0.1,0.1),align='center',height=height_factor) 
plt.ylabel('# of Picks (blue) + # of Bans (red)') 
plt.yticks(ind, sorted_totals[:,0]) 
plt.subplots_adjust(bottom=0.05, left=0.14,right=0.95,top=0.95) 
plt.ylim([ind.min() - height_factor, ind.max() + height_factor]) 

Dữ liệu của tôi được lưu trữ trong selected_composite và ind là các giá trị tôi đang sử dụng để đặt thanh (vị trí ytick). Tôi đang sử dụng khoảng trống để tạo ra các thanh cách đều nhau và loại công việc duy nhất này và tôi không chắc chắn chính xác lý do tại sao.

+0

Tôi đã suy nghĩ rằng vấn đề của bạn có thể liên quan đến việc có tất cả những thanh chứ không phải nhồi nhét, nhưng tôi đã cố gắng mã của bạn từ 5 đến ~ 50 thanh và không có vấn đề ở đây. –

+0

Vâng, tôi có cảm giác đó là vấn đề làm tròn vị trí pixel.tức là nếu bạn có chiều cao hình ảnh 8 pixel và muốn vẽ một đường thẳng qua trung tâm, bạn vẽ nó dọc theo hàng pixel 4 hoặc hàng pixel 5; một trong hai cách trông xấu – user1127062

+0

Trên một mặt lưu ý tôi nhận được kết quả xấu ngay cả với một trường hợp thử nghiệm tầm thường: 'từ nhập khẩu NumPy * ' từ pylab nhập khẩu * data = số không (50) 10 ind = arange (10) barh (ind, data) show() ' Trông khá xấu – user1127062

Trả lời

1

như user1127062 gợi ý, có thể mã của bạn là tốt.

Nếu bạn không cần cốt truyện có tính tương tác, lưu nó như một svg

Nếu bạn chạy:

data = numpy.random.randn(10000) 
pylab.hist(data,300) 
pylab.savefig(fileName+'.svg',format='svg') 

bạn sẽ thấy răng cưa pixel (trong độ rộng thanh) trong cửa sổ hình, nhưng nó đã biến mất trong tập tin svg.

Phần phụ "cairo" dường như làm tốt nhất việc lưu tệp png, nếu svg không tương thích với những gì bạn đang làm. Họ trông tốt như một ảnh chụp màn hình của svg.

Bạn có thể chuyển chương trình phụ trợ bằng cách chạy.

import matplotlib 
# you have to change the backend before importing pylab 
matplotlib.use('cairo') 
import pylab 

thô "cairo" không hỗ trợ show(), vì vậy bạn không thể sử dụng nó trong chế độ tương tác, hoặc để hiển thị một âm mưu trực tiếp từ một chương trình.

Các "GTKCairo" backend có tốt nhất của cả hai thế giới nhưng không được kích hoạt trong quá trình cài đặt mặc định (ít nhất là không phải trong một tôi nhận với sudo apt-get install matplotlib)

Nếu bạn đang sử dụng Ubuntu Tôi nghĩ rằng tất cả các bạn cần phải làm gì để có được nó làm việc là để cài đặt gtk, và biên dịch lại matplotlib:

sudo apt-get install git-core python-gtk2-dev 
git clone git://github.com/matplotlib/matplotlib.git 
cd matplotlib 
sudo python setup.py install 

Bạn có thể kiểm tra phụ trợ đang hoạt động với:

matplotlib.get_backend() 

Bạn c một cách tự động tải phụ trợ yêu thích của bạn bằng cách săn bắn xuống tập tin matplotlibrc của bạn, tôi tìm thấy mỏ:

/usr/local/lib/python2.7/dist-packages/matplotlib/mpl-data/matplotlibrc 
Các vấn đề liên quan