2014-07-18 17 views
5

Tôi đang tìm cách vẽ các vùng lỗi được tô bóng thay vì các thanh lỗi trong Python.Vùng không chắc chắn/lỗi bị mờ trong matplotlib.pyplot

Tôi biết rằng có matplotlib.pyplot.fill_between() mà bạn có thể xây dựng giải pháp cho lỗi y nhưng điều đó không bao gồm sự không chắc chắn x.

problem_description

Bất kỳ ý tưởng nào? Thật không may tôi đã không đủ tiếng để đưa ra một bình luận here.

Cảm ơn trước!


Sửa

matplotlib.pyplot.fill_betweenx() dẫn đến một cái gì đó như:

fill_between_problem1


Chỉnh sửa 2

Hơn nữa, tôi cho rằng nó không chính xác cho một khu vực không chắc chắn hoàn toàn. Dưới đây tôi vẽ những gì tôi giả sử là hình dạng đúng - Tôi hy vọng, tôi không sai ở đây ...

problem_sketch

import numpy as np 
import matplotlib.pyplot as plt 

x = np.asarray([1.0, 2.0, 3.0, 4.0]) 
y = np.asarray([1.0, 2.3, 3.0, 4.0]) 
xerr = np.asarray([0.1, 0.7, 0.1, 0.1]) 
yerr = np.asarray([0.1, 0.9, 1.2, 0.1]) 

plt.errorbar(x, y, yerr, xerr) 

plt.fill_between(x, y-yerr, y+yerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='none') 
plt.fill_betweenx(y,x-xerr, x+xerr, facecolor='#F0F8FF', alpha=1.0, edgecolor='#8F94CC', linewidth=1, linestyle='dashed') 

plt.show() 
# Red lines added with inkscape. 
+0

Tôi cũng đang suy nghĩ theo những dòng đó. Tuy nhiên, bạn không nghĩ rằng đó là một ước tính khá thận trọng? Tôi sẽ cố gắng tìm ra một cách thông minh để lắp một đường cong giới hạn vào một đám mây điểm. Thời hạn của bạn là gì? – Schorsch

+0

Tôi đã điều chỉnh phác thảo một chút thành i) rõ ràng hơn và ii) để sửa một số lỗi. Tôi không nghĩ rằng ví dụ của tôi là bảo thủ. Hãy tưởng tượng các điểm hoàn toàn không tương quan với các giá trị lỗi (bất kể chúng đến từ đâu). Do đó, bạn phải xem xét các vùng lỗi vuông. Lỗi lây lan giữa hai điểm như thế nào? Cách tiếp cận đơn giản nhất sẽ là phép tính xấp xỉ đầu tiên mà tôi đã phác thảo. Đừng đặt quá nhiều nỗ lực vào đó! Python đã sooo nhiều mô-đun đáng kinh ngạc, tôi không thể tưởng tượng rằng không có gì cho một vấn đề rất cơ bản như vậy. – smoneck

Trả lời

5

tôi nhận này để làm việc với các fill_betweenx chức năng:

import numpy as np 
import matplotlib.pyplot as plt 

x = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0]) 
y = np.asarray([1.0, 2.0, 3.0, 4.0, 5.0]) 
xerr = np.asarray([0.2, 0.4, 0.6, 0.8, 1.0]) 
yerr = np.asarray([0.1, 0.2, 0.3, 0.4, 0.5]) 

plt.errorbar(x, y, yerr, xerr) 

plt.fill_between(x, y-yerr, y+yerr,facecolor='r',alpha=0.5) 
plt.fill_betweenx(y,x-xerr,x+xerr,facecolor='b',alpha=0.5) 

plt.show() 

nào dẫn đến âm mưu này:

fill_between, fill_betweenx


EDIT

Trong ví dụ cụ thể của bạn, nó có thể là đủ để sử dụng:

plt.fill_between(x, y-yerr, y+yerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none') 
plt.fill_betweenx(y,x-xerr, x+xerr,facecolor='#F0F8FF',alpha=1.0,edgecolor='none') 

Bằng cách đó, bạn không cần phải cạnh, trong đó sẽ vượt qua và đưa ra này "gấp" đi . Hơn nữa, nó có thể tạo ra một ảo giác đầy đủ của một băng lỗi. Tuy nhiên, bạn sẽ phải sử dụng cả hai fill_betweenfill_betweenx.

+0

Cảm ơn bạn đã trả lời! Nhưng tôi thấy khó khăn khi đặt xerr và yerr vào một vùng không chắc chắn (cùng màu) với các đường viền ('edgecolor'). Điều này vẫn dẫn đến sự can thiệp. – smoneck

+0

Đã thêm ảnh trong bài đăng. Bạn có thể thấy các nút giao ở phần trên. – smoneck

+0

@smoneck Tôi có hiểu chính xác không: Bạn đang tìm kiếm một phong bì, bao gồm tất cả các lỗi trong một dải mượt mà? Hoặc, ví dụ như trong âm mưu của bạn cho Anstellwinkel = 0, bạn có muốn ban nhạc chạm vào 'y'-error không? hoặc là một phần của cốt truyện như bạn muốn nó? – Schorsch

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