2011-09-29 44 views
31

Làm cách nào để có thể thay đổi độ rộng đường của nắp thanh lỗi trong Matplotlib?Làm thế nào để thiết lập chiều rộng dòng của mũ thanh lỗi, trong matplotlib?

Tôi đã thử các mã sau:

(_, caplines, _) = matplotlib.pyplot.errorbar(
    data['distance'], data['energy'], yerr=data['energy sigma'], 
    capsize=10, elinewidth=3) 

for capline in caplines: 
    capline.set_linewidth(10) 
    capline.set_color('red') 

pp.draw() 

Thật không may, điều này sẽ cập nhật những màu sắc của mũ, nhưng không cập nhật dòng rộng của mũ!

Hiệu quả kết quả là tương tự như "lỗi dòng thanh chất béo/mũ mỏng" trong hình dưới đây: enter image description here

Nó sẽ được tốt đẹp để có "chất béo" mũ cột, trong trường hợp; làm thế nào điều này có thể được thực hiện, trong Matplotlib? Vẽ các thanh mũ "thủ công", từng cái một với plot() sẽ hoạt động, nhưng một lựa chọn đơn giản hơn sẽ là tốt nhất.

Trả lời

9

này được dựa trên câu trả lời @ Joaquin, nhưng một chút ngắn gọn hơn (nếu bạn chỉ muốn mũ lỗi đơn giản không có phong cách đặc biệt):

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

plt.errorbar(distance, 
    energy, 
    sigma, 
    capsize=5, 
    elinewidth=2, 
    markeredgewidth=2) 

enter image description here

29

EOL, bạn đã tiến rất gần ..,

distance = [1,3,7,9] 
energy = [10,20,30,40] 
sigma = [1,3,2,5] 

(_, caps, _) = plt.errorbar(distance, energy, sigma, capsize=20, elinewidth=3) 

for cap in caps: 
    cap.set_color('red') 
    cap.set_markeredgewidth(10) 

plt.show 

enter image description here

set_markeredgewidth bộ chiều rộng của các dòng nắp.

Đối tượng Matplotlib có quá nhiều thuộc tính thường rất khó để nhớ đúng đối tượng cho một đối tượng nhất định. IPython là một công cụ rất hữu ích cho việc quan sát matplotlib. Tôi đã sử dụng nó để phân tích các thuộc tính của đường 2Dline correponding đến các dòng cap lỗi và tôi đã tìm thấy nó và các thuộc tính đánh dấu khác.

Cheers

+0

Thanks a lot ! Chúng tôi đã sử dụng cùng một phương pháp, nhưng bằng cách nào đó tôi đã bỏ lỡ 'set_markeredgewidth'. :) Vì vậy, các mũ thực sự là điểm đánh dấu, cho Matplotlib, trái ngược với các dòng 2D. Dường như với tôi rằng đối số 'capsize' của' errorbar() 'tương đương với' cap.set_markersize() ', vì vậy cái thứ hai có thể bị loại bỏ, không? – EOL

+0

Trong khi bạn đang bình luận, tôi cũng nhận ra điều đó. Tôi cũng thay đổi hình ảnh. – joaquin

+0

@joaquin, làm thế nào để bạn sử dụng iPython cho "nội soi matplotlib". Điều này nghe có vẻ như một kỹ năng rất hữu ích. – Blink

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