Âm mưu gấu trúc không hiển thị


81

Khi sử dụng điều này trong một tập lệnh (không phải IPython), không có gì xảy ra, tức là cửa sổ cốt truyện không xuất hiện:

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()

Ngay cả khi thêm vào time.sleep(5), vẫn không có gì. Tại sao?

Có cách nào để làm điều đó mà không cần phải gọi matplotlib theo cách thủ công không?


Bạn có nhận được bất kỳ đầu ra từ ts.plot()?
itzy

1
ý bạn là gì "gọi matplotlib theo cách thủ công"? theo cách thông thường là import matplotlib.pyplot as plt,plt.show()
maxymoo

1
@itzy: không có gì xảy ra khi ts.plot(), chương trình kết thúc ngay sau đó. Ngay cả khi tôi thêm, time.sleep(10)không có gì được hiển thị
Basj

1
@maxymoo: Tôi nghĩ rằng làm .plot()trên một đối tượng gấu trúc sẽ giải quyết mọi thứ cho tôi (tức là gấu trúc thực hiện công việc matplotlib, thay vì tôi): hãy xem ví dụ này .
Basj

Câu trả lời:


158

Khi bạn đã thực hiện xong âm mưu của mình, bạn cần nói với matplotlib về shownó. Cách thông thường để thực hiện mọi việc là nhập matplotlib.pyplotvà gọi showtừ đó:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
plt.show()

Vì bạn đã yêu cầu không làm điều đó (tại sao?), Bạn có thể sử dụng các điều sau [LƯU Ý: Điều này dường như không còn hoạt động với các phiên bản mới hơn của pandas]:

import numpy as np
import pandas as pd
ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))
ts.plot()
pd.tseries.plotting.pylab.show()

Nhưng tất cả những gì bạn đang làm ở đó là tìm một nơi nào đó matplotlibđã được nhập vào pandasvà gọi cùng một showhàm từ đó.

Bạn đang cố gắng tránh gọi điện matplotlibtrong nỗ lực đẩy nhanh tiến độ? Nếu vậy thì bạn thực sự không tăng tốc bất cứ điều gì, vì pandasđã nhập pyplot:

python -mtimeit -s 'import pandas as pd'
100000000 loops, best of 3: 0.0122 usec per loop

python -mtimeit -s 'import pandas as pd; import matplotlib.pyplot as plt'
100000000 loops, best of 3: 0.0125 usec per loop

Cuối cùng, lý do ví dụ bạn đã liên kết trong nhận xét không cần lệnh gọi đến matplotliblà vì nó đang được chạy tương tác trong một iPython notebook, không phải trong một tập lệnh.


? Khi tôi chạy 'pd.tseries.plotting.pylab.show ()' Tôi nhận được "padnas.tseries' không có âm mưu thuộc tính, là nó lỗi thời Bạn đã ghi rằng vào năm 2015 ..
Sebastian Nielsen

Vâng, có vẻ như cánh cửa trở lại matplotlib không còn nữa. Dù sao thì tôi vẫn đề xuất lựa chọn đầu tiên
tmdavison

2
Cảm ơn. Tôi nghĩ rằng thiết kế API có thể tốt hơn. Nó là số lẻ chúng ta cần phải biết về matplotlib để sử dụng panda.plot
Phil

5

Trong trường hợp bạn đang sử dụng matplotlib,mà vẫn không thấy mọi thứ hiển thị trong sổ ghi chép iPython (hoặc Jupyter Lab), hãy nhớ đặt tùy chọn nội tuyến cho matplotlibsổ ghi chép.

import matplotlib.pyplot as plt

%matplotlib inline

Sau đó, mã sau sẽ hoạt động hoàn hảo:

fig, ax = plt.subplots(figsize=(16,9));
change_per_ins.plot(ax=ax, kind='hist')

Nếu bạn không đặt tùy chọn nội tuyến, nó sẽ không hiển thị và bằng cách thêm plt.show()vào cuối cùng, bạn sẽ nhận được các đầu ra trùng lặp.


0

Tôi vừa làm

import matplotlib.pyplot as plt

%matplotlib inline

và thêm dòng

plt.show()

bên cạnh df.plot () và nó hoạt động tốt cho


1
Vui lòng bao gồm môi trường bạn sử dụng để có thể chèn %matplotlib inline(đây không phải là Python chuẩn có thể được sử dụng trong một tập lệnh).
Basj

%matplotlib inlineđược sử dụng trong máy tính xách tay ipython / jupyter ...
Yatin

Vâng, không cần thêm% matplotlib nội tuyến nếu bạn đang sử dụng IDE như pycharm (tôi đã sử dụng nó).
devSpartan

0

Các câu trả lời khác liên quan đến việc nhập matplotlib.pyplotvà / hoặc gọi một số chức năng thứ hai theo cách thủ công.

Thay vào đó, bạn có thể định cấu hình matplotlibđể ở chế độ tương tác với các tệp cấu hình của nó .

Chỉ cần thêm dòng

interactive: True

đến một tệp được gọi matplotlibrcở một trong những nơi sau:

  • Trong thư mục làm việc hiện tại
  • Trong thư mục người dùng cụ thể của nền tảng được chỉ định bởi matplotlib.get_configdir()
    • Trên hệ thống giống unix, thường /home/username/.config/matplotlib/
    • Trên Windows C:\\Documents and Settings\\username\\.matplotlib\\
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.