2010-01-11 17 views
21

Tôi đang vẽ âm mưu Chức năng phân phối tích lũy, với số lượng lớn điểm dữ liệu. Tôi đang vẽ một vài dòng trên cùng một ô, được xác định bằng các điểm đánh dấu vì nó sẽ được in bằng màu đen và trắng. Những gì tôi muốn là các điểm đánh dấu được đặt cách đều nhau trong thứ nguyên x. Những gì tôi nhận được là một điểm đánh dấu trên mỗi điểm dữ liệu (và cho số điểm, tất cả đều trùng nhau)Lô có ít điểm đánh dấu hơn điểm dữ liệu (hoặc cách tốt hơn để vẽ CDF?) [Matplotlib, hoặc trợ giúp vẽ đồ thị chung]

Tôi không chắc liệu đó là sự hiểu biết của tôi về cốt truyện hay chỉ là thiếu hiểu biết về matplotlib. Tôi không thể tìm thấy cài đặt 'tần suất đánh dấu'.

Một giải pháp dễ dàng cho một dòng sẽ là lấy mọi giá trị N'th từ dòng và sử dụng nó như một dòng riêng biệt với linestyle = '', nhưng tôi muốn các điểm đánh dấu được căn chỉnh theo chiều dọc và x mảng có độ dài khác nhau.

# in reality, many thousands of values 
x_example = [ 567, 460, 66, 1034, 275, 26, 628, 99, 287, 157, 705, 421, 1093, \ 
    139, 204, 14, 240, 179, 94, 139, 645, 670, 47, 520, 891, 450, 56, 964, \ 
    1728, 99, 277, 356, 1628, 745, 364, 88, 112, 810, 816, 523, 401, 89,  \ 
    278, 917, 370, 53, 39, 90, 853, 356 ] 
x = sort(x_example) 
y = linspace(0,1,len(x)) 

ax = subplot(1,1,1) 
plots[w] = ax.plot(x,y, marker='o') 
+0

Giải pháp liên quan cho khoảng cách đánh dấu độ dài: http://stackoverflow.com/questions/17406758/plotting-a-curve-with-equidistant-arc-length-markers –

Trả lời

31

Bạn có thể làm plot(x,y,marker='o',markevery=5) để đánh dấu mọi điểm thứ năm, nhưng tôi không nghĩ rằng có bất kỳ hỗ trợ tích hợp nào để đặt dấu hiệu trong khoảng thời gian đều. Bạn có thể quyết định vị trí x nơi bạn muốn đánh dấu, sử dụng ví dụ: numpy.searchsorted để tìm dữ liệu nào trỏ các vị trí nằm giữa và sau đó nội suy giữa các điểm lân cận để tìm tọa độ y.

+0

Vâng, đó chắc chắn là đẹp hơn cách tiếp cận của tôi sẽ có được. Thời gian tìm kiếm tìm kiếm! –

+0

Ngoài ra, markevery hỗ trợ một đầu vào float mà 'các dấu sẽ được đặt cách nhau khoảng khoảng cách bằng nhau dọc theo dòng; khoảng cách dọc theo đường thẳng giữa các điểm đánh dấu được xác định bằng cách nhân khoảng cách phối hợp hiển thị của các trục đường bao quanh hộp với giá trị' http://matplotlib.org/api/lines_api.html#matplotlib.lines.Line2D.set_markevery – Erik