2017-03-07 16 views
7

Tôi có tập dữ liệu chứa thuộc tính x, y và chúng có thể được vẽ trong bề mặt x-y.Vạch phân tán matplotlib có chậm cho số lượng lớn dữ liệu không?

Ban đầu, tôi sử dụng mã

df.plot(kind='scatter', x='x', y='y', alpha=0.10, s=2) 
plt.gca().set_aspect('equal') 

Mã này là khá nhanh chóng với kích thước dữ liệu về 50000.

Gần đây, tôi sử dụng một tập dữ liệu mới hơn, với kích thước khoảng 2500000. Và biểu đồ phân tán trở thành chậm hơn nhiều.

Tôi muốn biết, nếu đó là hành vi mong đợi và nếu tôi có thể làm gì để cải thiện tốc độ cốt truyện?

+3

Rõ ràng là ít nhất là tuyến tính liên quan đến số điểm. Tùy thuộc vào kích thước đánh dấu của bạn, hiển thị và dpi tôi không thể tưởng tượng âm mưu rất nhiều điểm làm cho bất kỳ ý nghĩa nào cả. Vì vậy, một cách tiếp cận tự nhiên: down-mẫu dữ liệu khổng lồ của bạn (âm mưu chỉ 10%, lựa chọn ngẫu nhiên). Điều này thậm chí còn quan trọng hơn khi bạn bắt đầu sản xuất cốt truyện của mình trong các định dạng dựa trên đồ họa vector. ** Chỉnh sửa: ** Tôi rất chắc chắn việc sử dụng alpha cũng làm cho việc này rất chậm. Nếu bạn muốn mô phỏng một số cốt truyện mật độ (bằng cách sử dụng chữ cái/bóng), có tất nhiên là cách tiếp cận tốt hơn, nhưng không có đủ thông tin ở đây – sascha

+0

Một gợi ý khác là bạn có thể tạo hình ảnh dựa trên pixel có thể vẽ phần tử. Điều này làm giảm đáng kể mức tiêu thụ bộ nhớ và tốc độ. –

+1

Câu hỏi có thực sự không * "Này, tôi đã tăng số điểm bằng hệ số 50 và tốc độ âm mưu của tôi đột nhiên chậm hơn 50 lần. Có ai cho tôi biết lý do không?" *? – ImportanceOfBeingErnest

Trả lời

2

Vâng, đúng vậy. Lý do cho điều đó là một phân tán của hơn một nghìn điểm có ý nghĩa rất ít, vì vậy không ai bận tâm để tối ưu hóa nó. Bạn sẽ sử dụng một số đại diện khác cho dữ liệu của mình tốt hơn:

  • Bản đồ nhiệt nếu điểm của bạn được phân phối khắp nơi. Tạo các ô nhiệt độ khá nhỏ
  • Vẽ một số đường cong gần đúng với phân phối, có thể tương quan với y của bạn với x của bạn. Đảm bảo cung cấp một số giá trị tin cậy hoặc mô tả phân phối theo cách khác; cho tôi, ví dụ, xây dựng một hộp-với-râu của y cho mỗi x (hoặc một loạt các x) và đặt chúng trên cùng một lưới thường hoạt động khá tốt.
  • Giảm số liệu của bạn. @sascha trong các nhận xét gợi ý lấy mẫu ngẫu nhiên và đó chắc chắn là một ý tưởng hay. Tùy thuộc vào dữ liệu của bạn, có thể có cách tốt hơn để chọn điểm đại diện.
+0

Đề xuất tốt. Về phương pháp tiếp cận dựa trên nhiệt/lưới, [thảo luận này @ SO cũng xứng đáng] (http://stackoverflow.com/questions/7470288/matplotlib-pcolor-very-slow-alternatives). – sascha

+0

Có. Tôi cũng làm cho cốt truyện khác như cốt truyện mật độ và những người khác. Chỉ khi khám phá dữ liệu, bạn muốn vẽ dữ liệu theo nhiều cách. – cqcn1991

+0

làm thế nào bạn sẽ đề nghị âm mưu một cái gì đó giống như một bản đồ nơi bức tường được tất cả được đưa ra bởi, cho phép nói, 1000000 điểm dữ liệu ladar? – Kyle

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