Tôi đang sử dụng pyplot để hiển thị biểu đồ đường lên đến 30 dòng. Tôi muốn thêm một cách để hiển thị nhanh và ẩn từng dòng trên biểu đồ. Pyplot không có một menu, nơi bạn có thể chỉnh sửa thuộc tính dòng để thay đổi màu sắc hoặc phong cách, nhưng nó khá khó khăn khi bạn muốn ẩn dòng để cô lập một trong những bạn quan tâm. Lý tưởng nhất, tôi muốn sử dụng hộp kiểm trên chú giải để hiển thị và ẩn các dòng. (Tương tự như hiển thị và ẩn các lớp trong trình chỉnh sửa hình ảnh như Paint.Net) Tôi không chắc chắn nếu điều này là có thể với pyplot, vì vậy tôi mở cho các mô-đun khác miễn là chúng có phần dễ phân phối.Ẩn các đường sau khi hiển thị một hình chóp
Trả lời
Nếu muốn, bạn có thể kết nối cuộc gọi lại với chú thích sẽ hiển thị/ẩn các dòng khi chúng được nhấp. Có một ví dụ đơn giản ở đây: http://matplotlib.org/examples/event_handling/legend_picking.html
Đây là ví dụ "phù hợp" cần hoạt động mà không cần phải chỉ định mối quan hệ của dòng và điểm đánh dấu theo cách thủ công (Cũng có thêm một vài tính năng).
import numpy as np
import matplotlib.pyplot as plt
def main():
x = np.arange(10)
fig, ax = plt.subplots()
for i in range(1, 31):
ax.plot(x, i * x, label=r'$y={}x$'.format(i))
ax.legend(loc='upper left', bbox_to_anchor=(1.05, 1),
ncol=2, borderaxespad=0)
fig.subplots_adjust(right=0.55)
fig.suptitle('Right-click to hide all\nMiddle-click to show all',
va='top', size='large')
interactive_legend().show()
def interactive_legend(ax=None):
if ax is None:
ax = plt.gca()
if ax.legend_ is None:
ax.legend()
return InteractiveLegend(ax.legend_)
class InteractiveLegend(object):
def __init__(self, legend):
self.legend = legend
self.fig = legend.axes.figure
self.lookup_artist, self.lookup_handle = self._build_lookups(legend)
self._setup_connections()
self.update()
def _setup_connections(self):
for artist in self.legend.texts + self.legend.legendHandles:
artist.set_picker(10) # 10 points tolerance
self.fig.canvas.mpl_connect('pick_event', self.on_pick)
self.fig.canvas.mpl_connect('button_press_event', self.on_click)
def _build_lookups(self, legend):
labels = [t.get_text() for t in legend.texts]
handles = legend.legendHandles
label2handle = dict(zip(labels, handles))
handle2text = dict(zip(handles, legend.texts))
lookup_artist = {}
lookup_handle = {}
for artist in legend.axes.get_children():
if artist.get_label() in labels:
handle = label2handle[artist.get_label()]
lookup_handle[artist] = handle
lookup_artist[handle] = artist
lookup_artist[handle2text[handle]] = artist
lookup_handle.update(zip(handles, handles))
lookup_handle.update(zip(legend.texts, handles))
return lookup_artist, lookup_handle
def on_pick(self, event):
handle = event.artist
if handle in self.lookup_artist:
artist = self.lookup_artist[handle]
artist.set_visible(not artist.get_visible())
self.update()
def on_click(self, event):
if event.button == 3:
visible = False
elif event.button == 2:
visible = True
else:
return
for artist in self.lookup_artist.values():
artist.set_visible(visible)
self.update()
def update(self):
for artist in self.lookup_artist.values():
handle = self.lookup_handle[artist]
if artist.get_visible():
handle.set_visible(True)
else:
handle.set_visible(False)
self.fig.canvas.draw()
def show(self):
plt.show()
if __name__ == '__main__':
main()
Điều này cho phép bạn nhấp vào mục chú giải để bật/tắt nghệ sĩ tương ứng của họ. Ví dụ, bạn có thể đi từ này:
Để này:
Đây chính là chức năng mà tôi đang tìm kiếm! Tôi đã cố gắng tìm cách giải quyết kỳ lạ như sử dụng GUI Tkinter với các hộp kiểm đã vẽ lại biểu đồ mỗi lần thay đổi được thực hiện cho các lựa chọn. Điều này là dễ dàng hơn nhiều – sommerjj
Nhưng nó vẫn hiển thị truyền thuyết của các lô ẩn! – hbaromega
- 1. Điều khiển thoát khỏi đường ray sau khi hiển thị
- 2. Ẩn hiển thị các partials từ nhật ký đường ray
- 3. PyQt4: Cửa sổ hiển thị ở vị trí khác sau khi ẩn() và hiển thị()
- 4. Không thể hiển thị hình ảnh sau khi tải lên
- 5. Ẩn màn hình hiển thị pygame
- 6. Ẩn/hiển thị hình ảnh trong jquery
- 7. Hiển thị một biểu mẫu ẩn
- 8. Hiển thị trường văn bản UIPickerView được chọn, sau đó ẩn sau khi đã chọn
- 9. (Excel VBA) Nếu Giá trị Ô bằng "" Sau đó Hiển thị/Ẩn Hình ảnh
- 10. Jquery - Remove() sau khi ẩn()
- 11. Ẩn UITableView khi searchResultsTableXem hiển thị
- 12. Hiển thị và Ẩn các tiện ích
- 13. JTable ẩn và hiển thị các cột
- 14. Hiển thị và ẩn biểu đồ đường kẻ nổi bật trên màn hình
- 15. css ẩn nút "Chọn tệp" nhưng hiển thị tệp sau khi chọn
- 16. Ẩn và hiển thị linearlayout
- 17. Tại sao jQuery hiển thị/ẩn hiển thị sử dụng: không hiển thị thay vì hiển thị: bị ẩn?
- 18. CoordinatorLayout: Ẩn/Hiển thị một nửa thanh công cụ hiển thị?
- 19. Các ô hiển thị ban đầu sẽ ẩn sau khi gọi lại các phần: withRowAnimation: phương thức
- 20. Qt Hiển thị/Ẩn hình động của tiện ích con
- 21. sau khi IFRAME không hiển thị được
- 22. khả năng hiển thị: hiển thị/ẩn div
- 23. Ẩn bàn phím sau khi gọi Hoạt động mới hiển thị ProgressDialog
- 24. Bootstrap Collapse không chuyển đổi sau khi bạn hiển thị, ẩn hoặc chuyển đổi từ mã
- 25. Android-ẩn thanh tác vụ trong khi khởi động và sau đó hiển thị lại nó?
- 26. Làm cho một div hiển thị và một hình khác hiển thị
- 27. Cách tạo thanh điều hướng ẩn với bootstrap hiển thị sau khi bạn cuộn?
- 28. Làm cách nào để tự động ẩn hộp cảnh báo sau khi nó hiển thị?
- 29. ng-lặp lại: hiển thị một mục khi nhấp và ẩn các mục khác
- 30. đường ray fields_for không hiển thị sau khi lỗi xác thực trên biểu mẫu lồng nhau
Chỉ cần để làm giàu cho câu hỏi của bạn, bạn có thể tìm thấy loại hành vi (chọn dòng sẽ hiển thị trên biểu đồ bằng cách nhấp vào phụ đề chú giải) trong gnuplot, ví dụ: http://gnuplot.sourceforge.net/demo_svg_5.0/simple.html Tôi không chắc bạn sẵn sàng thay đổi từ pyplot sang công cụ khác như thế nào (gnuplot) , nhưng nếu bạn muốn theo kịp với python và sử dụng gnuplot thì có giao diện 'gnuplot.py'. – David
Đây chính là chức năng mà tôi đang tìm kiếm. Tôi sẽ đào sâu vào nó và xem nó sẽ hoạt động tốt như thế nào với chương trình của tôi. – sommerjj
Cập nhật: Tôi từ bỏ gnuplot. Nó không hoạt động tốt cho tôi. – sommerjj