2016-03-03 25 views
7

Tôi tự hỏi nếu có cách nào để kiểm soát cốt truyện nào nằm trên đầu các ô khác nếu một lô làm cho nhiều ô trên một trục. Một ví dụ:Điều khiển Matplotlib mà cốt truyện nằm trên đầu trang

enter image description here

Như bạn có thể thấy, dòng màu xanh lá cây là trên đầu trang của loạt màu xanh, và cả hai series là trên đầu trang của các chấm đen (mà tôi thực hiện với một biểu đồ phân tán). Tôi muốn các chấm đen nằm trên cả hai dòng (dòng).

đầu tiên tôi làm việc trên với đoạn mã sau

plt.plot(series1_x, series1_y) 
plt.plot(series2_x, series2_y) 
plt.scatter(series2_x, series2_y) 

Sau đó, tôi đã cố gắng sau

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y) 

Và một số biến thể trên đó, nhưng không may mắn.

Hoán đổi xung quanh các chức năng plot có ảnh hưởng đến âm mưu ở trên đầu, nhưng không có vấn đề gì khi tôi đặt chức năng scatter, các đường nằm trên đầu các chấm.

LƯU Ý:

Tôi đang sử dụng Python 3.5 trên Windows 10 (ví dụ này), nhưng chủ yếu là Python 3.4 trên Ubuntu.

Chú thích 2:

Tôi biết điều này có vẻ như một vấn đề tầm thường, nhưng tôi có một trường hợp loạt trên đầu trang của các dấu chấm được dày đặc đến nỗi màu sắc của các dấu chấm được che khuất, và trong những trường hợp đó tôi cần độc giả của tôi để thấy rõ những dấu chấm nào là màu gì, vì thế tại sao tôi cần các dấu chấm để ở trên đầu.

+0

Tại sao bạn tạo lại các trục phụ cho mỗi ô mới? Bạn chỉ có thể tạo ra một subplot sau đó làm tất cả âm mưu của bạn trong đó (và sử dụng zorder như trong các câu trả lời dưới đây để kiểm soát đó là trên đầu trang) – tom

+0

Tôi đã đề cập đến rằng tôi đã "một số biến thể" trên mà tôi đã cho thấy ở đó - tôi đã làm làm điều đó với chỉ subplot quá. Tôi thường chỉ làm điều đó với plt.plot, plt.scatter, vv.Tôi thường không lo lắng về các trục và các đối tượng hình trừ khi tôi cần phải vượt qua chúng xung quanh các chức năng khác nhau và làm tất cả các loại công cụ ưa thích. –

Trả lời

12

Sử dụng zorder kwarg trong trường hợp mức độ thấp hơn sắp xếp lại, hãy xem lại cốt truyện, ví dụ:

plt.plot(series1_x, series1_y, zorder=1) 
plt.plot(series2_x, series2_y, zorder=2) 
plt.scatter(series2_x, series2_y, zorder=3) 
+0

Tuyệt vời, hoạt động hoàn hảo. Nice giải pháp thanh lịch. Tôi giả sử rằng giá trị 'zorder' mặc định là' zorder' của lô trước, bắt đầu từ một giá trị? Vì vậy, nói rằng tôi chỉ làm một 'cốt truyện' (cái đầu tiên) mà không có' zorder', 'cốt truyện' có' zorder = 1', 'ô' tiếp theo (không chỉ định' zorder') có 'zorder = 2', vv ..? –

+0

Xin lỗi, trong bình luận của tôi ở trên tôi có nghĩa là giá trị "zorder' mặc định là một cộng với giá trị' zorder' của lô trước ... " –

+0

Vâng, có vẻ như vậy trong thử nghiệm của tôi. – bernie

1

Một giải pháp khác ngoài việc sử dụng trật tự, và đáng biết: Bạn có thể chỉ vẽ một số điểm bằng cách sử dụng lệnh lô. Một cái gì đó như plot(series2_x, series2_y, ' o'). Lưu ý các ' o' với một không gian có nghĩa là không có đường nhưng điểm vòng tròn. Bằng cách này, thứ tự vẽ chúng trên các trục sẽ đặt chúng lên hàng đầu.

+0

Điều này cũng hoạt động, cảm ơn. Làm thế nào tôi có thể thiết lập kích thước của điểm đánh dấu nếu tôi sử dụng 'cốt truyện'? Với 'scatter', tôi chỉ đặt tham số' s' để đặt kích thước. –

+1

Đối với câu hỏi cụ thể của bạn, bạn có thể thêm đối số 'markersize = 10' hoặc' ms = 10' (hoặc bất kỳ số nào bạn muốn) vào lệnh cốt truyện của mình. Bạn có thể xem danh sách đầy đủ các đối số và chức năng tại đây: http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot – zephyr

1

Có, bạn có thể. Chỉ cần sử dụng tham số zorder. Giá trị càng cao, càng nhiều càng tốt.

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y, zorder=3) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, zorder=4) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y, zorder=5) 

Hoặc, bạn có thể thực hiện đường kẻ và điểm đánh dấu cùng một lúc. Bạn thậm chí có thể thiết lập màu sắc khác nhau cho dòng và đánh dấu khuôn mặt.

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

Các '-o' bộ cốt truyện phong cách để lót và đánh dấu vòng tròn, color='b' bộ dòng màu xanh và mfc='k' bộ màu sắc khuôn mặt marker sang màu đen.

+0

Không chắc tại sao câu trả lời này lại bị giảm giá - nó đã cung cấp thông tin giống như thông tin khác (tốt) câu trả lời và cũng đưa ra một thay thế khá. –

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