không thể sử dụng pulllayout mà không gặp lỗi trong matplotlib
Trong đoạn mã sau, nếu tôi bỏ ghi chú dòng có lệnh gọi tới tightlayout, tôi sẽ gặp sự cố trong matplotlib. Tôi sẽ biết ơn cho bất kỳ đề nghị lại. tại sao điều này lại xảy ra.
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig= plt.figure(figsize=(12, 7))
ax= fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.stock_img()
# plt.tight_layout()
plt.show()
Đây là dấu vết:
Traceback (cuộc gọi gần đây nhất): Tệp "test.py", dòng 6, trong plt.tight_layout () Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-package \ matplotlib \ cbook \recation.py ", dòng 451, trong trình bao bọc trả về func (* args, ** kwargs) Tệp" C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-Package \ matplotlib \ pyplot.py ", dòng 1490, trong gcf tens_layout ( ) .tight_layout (pad = pad, h_pad = h_pad, w_pad = w_pad, trực tràng = trực tràng) Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-Package \ matplotlib \ cbook \recation.py", dòng 411 , trong trình bao bọc trả về func (* inner_args, ** inner_kwargs) Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-Package \ matplotlib \ figure.py", dòng 2613, trong tens_layout kwargs = get_tight_layout_figure (Tệp " C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-pack \ matplotlib \ chật_layout.py ", dòng 303, trong get_tight_layout_figure kwargs = auto_adjust_subplotpars (hình, kết xuất, Tệp" C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-Package \ matplotlib \ tight_layout.py ", dòng 84, trong auto_adjust_subplotpars bb + = [ ax.get_tightbbox (render, for_layout_only = True)] Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-Package \ matplotlib \ axis_base.py", dòng 4203, trong get_tightbbox bbox = a.get_tightbbox (renderer) Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-pack \ matplotlib \ artist.py", dòng 286, trong get_tightbbox bbox = Bbox.intersection (bbox, clip_path.get_extents ()) Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-pack \ matplotlib \ path.py ", dòng 603, trong get_extents trả về Bbox ([xys.min (axis = 0), xys.max (axis = 0)]) Tệp "C: \ ProgramData \ Anaconda3 \ envs \ py38 \ lib \ site-package \ numpy \ core_methods.py", dòng 43, trong _amin trả về umr_minimum (a, axis, None, out, keepdims, initial, where) ValueError: zero -size mảng để giảm hoạt động tối thiểu mà không có danh tính
Tôi đang sử dụng Python 3.8.5 với matplotlib 3.3.1 và CartoPy 0.18.0.
Trả lời
Tôi có cấu hình giống hệt nhau và có thể tạo lại lỗi của bạn. Nhưng sau khi tìm kiếm các dấu vết tương tự, cuối cùng tôi đã tìm thấy bài đăng này , nơi nâng cấp Matplotlib từ 3.3.1 lên 3.3.2 đã giải quyết được vấn đề.
Vì vậy, nếu lần đầu tiên bạn chạy trong một thiết bị đầu cuối (với pip hoặc conda)
conda upgrade matplotlib
hoặc là
pip install matplotlib==3.3.2
Sau đó, đảm bảo Matplotlib đã được cập nhật lên 3.3.2 và chạy tập lệnh của bạn:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
fig= plt.figure(figsize=(12, 7))
ax= fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.stock_img()
plt.tight_layout()
plt.show()
đã tạo ra mong muốn với hoạt động hiệu quả tight_layout()trên máy của tôi.