如何解決 Windows 系統下 Matplotlib 在 HiDPI 顯示器顯示過小的問題
Posted on Tue 23 April 2019 in Python
前言
由於在使用 Matplotlib 時,發現在使用高解析度的螢幕有內容顯示過小的問題,不會隨著 Windows 的設定來縮放,導致看起來很吃力。經過搜尋,發現是因為 Matplotlib 預設使用 Qt5 來 rendering,而 Qt5 在 Windows 下預設不會自動縮放,這裡介紹兩種方法來解決這個問題。
更新:新增如何在 Qt5 中啟用 DPI 縮放的功能。
方法一:啟用 Qt5 中的 DPI 縮放功能
如何啟用 Qt5 DPI scaling 的範例 code:
# 需要先 import matplotlib 的 backend Qt5
import PyQt5 as qt
# 用 matplotlib 畫圖之前要先啟用 Qt5 DPI scaling
qt.QtWidgets.QApplication.setAttribute(qt.QtCore.Qt.AA_EnableHighDpiScaling, True)
方法二:替換 Matplotlib 的 backend
此為如何將 backend 從預設的 Qt5 替換為 Tk 的範例 code:
import matplotlib.pyplot as plt
if plt.get_backend() == 'Qt5Agg': # 判斷 backend 是否為 Qt5
plt.switch_backend('TkAgg') # 將 backend 替換為 Tk
Tk 為 Python 內建的原生 UI,可以隨著 Windows 的設定來縮放,不過可能是因為用 bilinear 來縮放,某些影像 rendering 可能會有 aliasing,手動調整視窗大小可以改善此瑕疵。
參考資料
- One way to deal with High DPI (4k) Screens in Python
- 關於 Matplotlib backend 的詳細資料與還有哪些 backend 能替換,可以閱讀官網上的說明。