matplotlib在server端无法画图问题

在server端无GUI环境下,使用Python的Matplotlib画图会报错。文章给出解决方案,分三步操作:在画图的.py文件中加入特定三行;在Linux中创建并编辑~/.config/matplotlib/matplotlibrc文件;在画图处添加保存操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在server端如果没有gui,无法画图,经常会遇到错误
_tkinter.TclError: no display name and no $DISPLAY environment variable
只需要三步
1)在画图的.py文件中加入以下三行:

import matplotlib as mpl
mpl.use('Agg') 
from matplotlib import pylot 

2)Linux中,创建文件 ~/.config/matplotlib/matplotlibrc,并且加入以下内容:

backend : Agg

3)在画图的地方,加上保存

plt.show()
plt.savefig('dog.png')
### 如何在 Linux 平台上使用 Python Matplotlib 实现中文字体支持 要在 Linux 上通过 Matplotlib 绘制带有中文字符的图形,可以按照以下方法配置中文字体。 #### 1. 安装必要的依赖项 为了使 Matplotlib 支持中文字体,在 Debian 或 Ubuntu 系统上需要先安装 `fonts-wqy-zenhei` 字体包以及 Matplotlib 的相关库[^2]。运行以下命令完成安装: ```bash sudo apt-get update sudo apt-get install fonts-wqy-zenhei python-matplotlib ``` 这会安装文泉驿正黑字体(WenQuanYi Zen Hei),它是一种常见的开源中文字体。 --- #### 2. 设置 Matplotlib 使用中文字体 Matplotlib 默认不加载中文字体,因此需要手动指定使用的字体文件路径。以下是具体操作方式: ##### 方法一:修改 Matplotlib 配置文件 可以通过设置 Matplotlib 的全局参数来更改默认字体。创建或编辑 `.matplotlib/matplotlibrc` 文件并添加以下内容[^3]: ```plaintext font.family: sans-serif font.sans-serif: WenQuanYi Zen Hei, Times New Roman, DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif mathtext.fontset: custom mathtext.rm: SimSun mathtext.it: SimSun:italic mathtext.bf: SimSun:bold ``` 上述配置指定了中文字体为 `WenQuanYi Zen Hei`,同时保留了部分西文字体的支持。 ##### 方法二:动态调整字体(适用于单次脚本) 如果不想永久改变 Matplotlib 的配置,也可以在代码中临时设定字体。例如: ```python import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties # 加载本地字体文件 font_path = '/usr/share/fonts/truetype/wqy/wqy-zenhei.ttc' # 文泉驿正黑字体路径 font_prop = FontProperties(fname=font_path) # 创建图表 plt.figure(figsize=(6, 4)) plt.plot([0, 1], [0, 1], label='示例曲线') plt.title('这是一个带中文标题的例子', fontproperties=font_prop) plt.xlabel('横轴标签 (X)', fontproperties=font_prop) plt.ylabel('纵轴标签 (Y)', fontproperties=font_prop) plt.legend(prop=font_prop) plt.show() ``` 这段代码显式定义了一个 `FontProperties` 对象,并将其应用于所有的文本元素,从而确保显示正常。 --- #### 3. 解决无 GUI 环境下的绘图问题 当在没有图形界面的 Linux 终环境中工作时,可能需要切换到非交互式的后渲染器(如 Agg)。这样即使缺少 X Server,仍然能够保存图像文件[^5]。例如: ```python import matplotlib matplotlib.use('Agg') # 切换到 Agg 后 import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 2, 3], [4, 5, 6]) ax.set_title('无GUI环境中的绘图') output_file = 'plot.png' plt.savefig(output_file) # 将图片保存至文件 print(f"已生成 {output_file}") ``` --- #### 总结 通过以上步骤,可以在 Linux 下成功配置 Matplotlib 来支持中文字体。无论是静态配置还是动态调整,都可以满足不同场景的需求。此外,对于远程服务器或其他无 GUI 场景,推荐采用 Agg 渲染器以解决兼容性问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值