Làm thế nào để hiển thị hai số liệu bằng matplotlib?


81

Tôi gặp một số rắc rối khi vẽ hai hình cùng lúc, không được thể hiện trong một cốt truyện. Nhưng theo tài liệu, tôi đã viết mã và chỉ có hình một. Tôi nghĩ có lẽ tôi đã đánh mất thứ gì đó quan trọng. Bất cứ ai có thể giúp tôi tìm ra? Cảm ơn. (* Tlist_first * được sử dụng trong mã là một danh sách dữ liệu.)

plt.figure(1)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')
plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 30, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 60, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend()
plt.xlim(0,120)
plt.ylim(0,1) 
plt.show()
plt.close() ### not working either with this line or without it

plt.figure(2)
plt.hist(tlist_first, bins=2000000, normed = True, histtype ="step", cumulative = True, color = 'g',label = 'first answer')

plt.ylabel('Percentage of answered questions')
plt.xlabel('Minutes elapsed after questions are posted')

plt.axvline(x = 240, ymin = 0, ymax = 1, color = 'r', linestyle = '--', label = '30 min')
plt.axvline(x = 1440, ymin = 0, ymax = 1, color = 'c', linestyle = '--', label = '1 hour')
plt.legend(loc= 4)
plt.xlim(0,2640)
plt.ylim(0,1)
plt.show()

Câu trả lời:


91

Ngoài cách gọi plt.show()ở cuối tập lệnh, bạn cũng có thể điều khiển từng hình riêng biệt thực hiện:

f = plt.figure(1)
plt.hist........
............
f.show()

g = plt.figure(2)
plt.hist(........
................
g.show()

raw_input()

Trong trường hợp này, bạn phải gọi raw_inputđể giữ cho các số liệu tồn tại. Bằng cách này, bạn có thể chọn động những số liệu bạn muốn hiển thị

Lưu ý: raw_input()đã được đổi tên thành input()trong Python 3


1
Thật không may với python3.6 và matplotlib mới nhất, việc gọi một số fig.show () dường như không hiển thị gì. Tôi vẫn phải gọi plt.show () ở cuối.
kakyo

1
@kakyo - Sử dụng Python 3.6.6với Matplotlib 2.2.2(là bản phát hành mới nhất tại thời điểm bạn viết bài); giải pháp trên phù hợp với tôi. Vấn đề của bạn phải đến từ một thứ khác, ví dụ như phần phụ trợ được sử dụng. Đang chạy matplotlib.get_backend(), tôi nhận được'Qt5Agg'
n1k31t4

Tôi cũng đã phải thêm figure=gvào thứ hai plt.hist().
Michael Litvin

tôi có cần các gói khác không? NameError: name 'raw_input' is not defined
zheyuanWang

1
@zheyuanWang Nếu bạn đang sử dụng python 3, bạn phải sử dụng input(). Xem ghi chú cuối cùng trong bài đăng
joaquin

61

Bạn chỉ nên gọi plt.show()ở cuối sau khi tạo tất cả các ô.


8
Mình thấy điều này khá khó chịu, vì gọi show()một lần thì không gọi lại được, muốn chiếu lại cốt truyện thì phải replot lại?
Alcott

23

Tôi có vấn đề này như nhau.


Đã làm:

f1 = plt.figure(1)

# code for figure 1

# don't write 'plt.show()' here


f2 = plt.figure(2)

# code for figure 2

plt.show()


Viết 'plt.show ()' chỉ một lần, sau hình cuối cùng. Đã làm cho tôi.


6
Điều này cũng giống như câu trả lời từ
janneb

Điều này hiển thị nó trong cùng một cửa sổ, không phải 2 cửa sổ riêng biệt. Trả lời câu hỏi của OP. Do đó, ủng hộ.
Mike de Klerk

Nhưng nếu bạn muốn có một âm mưu riêng thì sao? nó được vẽ trên cùng một âm mưu
Nhoj_Gonk

8

Ngoài ra, tôi khuyên bạn nên bật tính năng tương tác ngay từ đầu và ở cốt truyện cuối cùng, hãy tắt nó đi. Tất cả sẽ hiển thị, nhưng chúng sẽ không biến mất vì chương trình của bạn sẽ ở lại cho đến khi bạn đóng các số liệu.

import matplotlib.pyplot as plt
from matplotlib import interactive

plt.figure(1)
... code to make figure (1)

interactive(True)
plt.show()

plt.figure(2)
... code to make figure (2)

plt.show()

plt.figure(3)
... code to make figure (3)

interactive(False)
plt.show()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.