如何解決 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,手動調整視窗大小可以改善此瑕疵。

參考資料

  1. One way to deal with High DPI (4k) Screens in Python
  2. 關於 Matplotlib backend 的詳細資料與還有哪些 backend 能替換,可以閱讀官網上的說明

分享到: DiasporaTwitterFacebookLinkedInHackerNewsEmailReddit