2009-09-16 35 views
10

Tôi là một chút người mới vào lúc này và đang cố gắng tạo một biểu đồ phân tán với kích thước và màu sắc tùy chỉnh của bong bóng. Biểu đồ hiển thị tốt nhưng làm thế nào để tôi có được một huyền thoại nói những gì màu sắc đề cập đến. Đây là như xa như tôi đã có:Truyền thuyết Matplotlib cho Scatter với các màu tùy chỉnh

inc = [] 
out = [] 
bal = [] 
col = [] 

fig=Figure() 
ax=fig.add_subplot(111) 

inc = (30000,20000,70000) 
out = (80000,30000,40000) 
bal = (12000,10000,6000) 
col = (1,2,3) 
leg = ('proj1','proj2','proj3') 

ax.scatter(inc, out, s=bal, c=col) 
ax.axis([0, 100000, 0, 100000]) 

ax.set_xlabel('income', fontsize=20) 
ax.set_ylabel('Expenditure', fontsize=20) 
ax.set_title('Project FInancial Positions %s' % dt) 
ax.grid(True) 
canvas=FigureCanvas(fig) 
response=HttpResponse(content_type='image/png') 
canvas.print_png(response) 

chủ đề này là hữu ích, nhưng không thể có được nó để giải quyết vấn đề của tôi: Matplotlib: Legend not displayed properly

Trả lời

9

Có thể điều này example là hữu ích.

Nói chung, các mục trong chú giải có liên quan với một số loại đối tượng được vẽ . Hàm scatter xử lý tất cả các vòng kết nối dưới dạng một đối tượng, xem:

print type(ax.scatter(...)) 

Vì vậy, giải pháp là tạo nhiều đối tượng. Do đó, gọi số scatter nhiều lần.

Thật không may, phiên bản mới hơn của matplotlib dường như không sử dụng hình chữ nhật trong chú giải. Vì vậy, huyền thoại sẽ chứa các vòng tròn rất lớn, vì bạn đã tăng kích thước của các đối tượng ô phân tán của bạn.

Chức năng chú thích là đối số từ khóa markerscale để kiểm soát kích thước của điểm đánh dấu huyền thoại, nhưng dường như nó bị hỏng.

Cập nhật:

Các Legend guide khuyến cáo sử dụng Proxy Artist trong trường hợp tương tự. Color API giải thích các giá trị fc hợp lệ.

p1 = Rectangle((0, 0), 1, 1, fc="b") 
p2 = Rectangle((0, 0), 1, 1, fc="g") 
p3 = Rectangle((0, 0), 1, 1, fc="r") 
legend((p1, p2, p3), ('proj1','proj2','proj3')) 

Để có được màu sắc sử dụng trước đây trong một âm mưu, sử dụng ví dụ trên như:

pl1, = plot(x1, y1, '.', alpha=0.1, label='plot1') 
pl2, = plot(x2, y2, '.', alpha=0.1, label='plot2') 
p1 = Rectangle((0, 0), 1, 1, fc=pl1.get_color()) 
p2 = Rectangle((0, 0), 1, 1, fc=pl2.get_color()) 
legend((p1, p2), (pl1.get_label(), pl2.get_label()), loc='best') 

Ví dụ này sẽ làm cho một âm mưu như:

Matplotlib with custom legend

+0

Giải pháp tốt, ngay cả khi nó không hoạt động vì điểm đánh dấu bị hỏng. – tom10

+0

Ví dụ đó rất hữu ích. Phải đi và làm công việc thích hợp trong một thời gian nhưng sẽ trở lại với nó tối nay. – PhoebeB

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