解决docker里matplotlib和plotly画图以及保存图片时中文乱码的问题

1. matplotlib画图的问题

问题

在docker容器里启动jupyter后,使用plt画图时中文有乱码。

解决

下载SimHei.ttf

链接:Download Free Font SimHei

然后在jupyter里运行如下代码,获取要放置simhei.ttf的目录

import matplotlib as mpl
d0 = mpl.matplotlib_fname()
d1=d0.replace('matplotlibrc', 'fonts/ttf')
print('1. 将SimHei.ttf放到如下目录:\n%s' % d1)
print('2. 清空缓存目录:\n%s' % (mpl.get_cachedir()))
print('3. 修改配置文件:%s' % d0)

解决docker里matplotlib和plotly画图以及保存图片时中文乱码的问题_第1张图片

修改配置文件 matplotlibrc:

将一下三句修改,并将 # 去掉:

font.family         : sans-serif 
...
font.sans-serif     : SimHei
...
axes.unicode_minus  : False # use unicode for the minus symbol

解决docker里matplotlib和plotly画图以及保存图片时中文乱码的问题_第2张图片

解决docker里matplotlib和plotly画图以及保存图片时中文乱码的问题_第3张图片

2. plotly离线保存图片中文乱码的问题

中文乱码背后的原因都一样,都是因为找不到字体(ttf)文件。

正如上面解决matplotlib的画图问题一样,都需要将字体文件(如simhei.ttf)放到一个合适的目录,我用的是docker,具体方法见下面chatgpt的回答: 

解决docker里matplotlib和plotly画图以及保存图片时中文乱码的问题_第4张图片

保存图像的时候需要设置font参数,还是参考gpt的问答吧,实在是太优秀了:

import plotly.graph_objs as go
from plotly.offline import plot

# 设置字体
font = dict(family='Microsoft YaHei', size=18)

# 创建数据和布局
trace = go.Scatter(x=[1, 2, 3], y=[4, 5, 6])
layout = go.Layout(title='示例图', font=font, xaxis=dict(title='横坐标', font=font),
                   yaxis=dict(title='纵坐标', font=font))

# 绘制图形
fig = go.Figure(data=[trace], layout=layout)
plot(fig, filename='example.html', auto_open=False)

# 将图片保存为 png 格式
fig.write_image('example.png')

你可能感兴趣的:(环境&安装,python,docker,jupyter,容器)