Matplotlib 在手机上的渲染 —— 图表怎么弹出来
Matplotlib 在手机上的挑战
Matplotlib 是 Python 最常用的数据可视化库,但它的默认后端(Agg、QtAgg、TkAgg)在 Android 上都不直接可用——没有窗口系统(Qt/Tk)的问题、Agg 只能生成静态图片不能弹窗口。
Pydroid 解决了这个问题:内置 Matplotlib 的 Kivy backend,让图表可以直接在 Kivy GUI 里弹出并渲染成可交互的图窗。
三种渲染方式
1. Kivy backend(默认,推荐)
这是 Pydroid 给 Matplotlib 做的定制后端。你正常写 Matplotlib 代码,Pydroid 检测到 Kivy 环境后自动切换到 Kivy backend,plt.show() 会弹出一个 Kivy 窗口显示图表。
检测规则:代码里包含 import matplotlib 并且检测到 Kivy 可用(Kivy backend wheel 已装)。不需要额外设置。
2. 保存为 PNG 图片
不想弹窗口、只想看一眼图的情况下,最简单的方式:
import matplotlib.pyplot as plt
plt.plot([1,2,3], [1,4,9])
plt.savefig("Documents/Pydroid3/my-chart.png")
保存后用手机图库或文件管理器直接打开 PNG。这是在手机屏幕上看 Matplotlib 图最稳的方式——不依赖 GUI 框架,任何时候都能跑。
3. 终端模式强制
如果你发现 plt.show() 没弹出图窗而是在终端跑(或者反之),可以在代码开头加一个 Pydroid 特殊指令来强制模式:
#Pydroid run terminal
这告诉 Pydroid 「用终端模式跑这个脚本,不要尝试 GUI」。适用于你写的 Matplotlib 脚本只想 savefig 不需要交互窗口的场景。
实际使用示例
画一个简单折线图
import matplotlib.pyplot as plt
x = list(range(10))
y = [i**2 for i in x]
plt.plot(x, y, marker='o')
plt.title("Square function")
plt.xlabel("x")
plt.ylabel("x^2")
plt.savefig("Documents/Pydroid3/square-chart.png")
画一个 pandas DataFrame 的直方图
import pandas as pd
import matplotlib.pyplot as plt
df = pd.read_csv("Documents/Pydroid3/data.csv")
df['value'].hist(bins=30)
plt.savefig("Documents/Pydroid3/hist.png")
移动端绘图的实用建议
- 别弹窗口,优先 savefig:手机屏幕小,Matplotlib 弹出来的 Kivy 窗口虽然能用但操作效率低。保存成 PNG 后用图库看更清楚
- 缩小图表尺寸:用
plt.figure(figsize=(6, 4))显式指定较小的图,避免保存出来的图在手机屏幕上显示时需要频繁缩放 - 中文支持:默认 Matplotlib 在 Android 上没有中文字体,画中文会显示成方框。最简单的 workaround 是在 Pydroid 内置的 matplotlib rcParams 里指定一个 Android 系统字体路径,或者干脆在移动端版本里用英文标签