python - Unicode 字符渲染

标签 python matplotlib

我找不到在 matlibplot 图表中呈现 unicode 字符的方法:

 # -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
from numpy.random import normal
from itertools import count
import matplotlib
a = {u'\u043f\u0430\u0440\u0435\u0430\u0442\u0430': 0.018144370928201092, u'\u0440\u0435\u043b\u0430\u0442\u0438\u0432\u0438\u0442\u0438\u0441\u0442\u0438\u0447\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043d\u0430\u043e\u0453\u0430': 0.0704839024518581, u'\u0444\u0438\u0437\u0438\u043a\u0430': 0.025219010969013446, u'\u043a\u043e\u0438': 0.0039908251856718025, u'\u0438\u0437\u0431\u0443\u0432\u043d\u0430\u043b\u0430': 0.0035792606713834184, u'\u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043c\u0438\u043a\u0440\u043e\u0434\u0438\u043c\u0435\u043d\u0437\u0438\u0438': 0.008406336989671147, u'\u0434\u0430\u0432\u0430': 0.016812673979342295, u'\u0441\u0442\u0440\u0430\u043d\u0430': 0.008406336989671147}

plt.bar(*zip(*zip(count(), a.values())))
plt.title("Some chart")
plt.xticks(*zip(*zip(count(0.4), (a.keys()))))
plt.xlabel("Value")
plt.ylabel("Frequency")

plt.show()

最佳答案

指定带有西里尔字符的字体。例如,

import matplotlib as mpl
mpl.rcParams['font.family'] = 'Arial'

您的默认字体可能是'Helvetica',它没有所需字符的字形。


import matplotlib.pyplot as plt
from numpy.random import normal
from itertools import count
import matplotlib as mpl
mpl.rcParams['font.family'] = 'Arial'
a = {u'\u043f\u0430\u0440\u0435\u0430\u0442\u0430': 0.018144370928201092, u'\u0440\u0435\u043b\u0430\u0442\u0438\u0432\u0438\u0442\u0438\u0441\u0442\u0438\u0447\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043d\u0430\u043e\u0453\u0430': 0.0704839024518581, u'\u0444\u0438\u0437\u0438\u043a\u0430': 0.025219010969013446, u'\u043a\u043e\u0438': 0.0039908251856718025, u'\u0438\u0437\u0431\u0443\u0432\u043d\u0430\u043b\u0430': 0.0035792606713834184, u'\u043c\u0435\u0445\u0430\u043d\u0438\u043a\u0430\u0442\u0430': 0.008406336989671147, u'\u043c\u0438\u043a\u0440\u043e\u0434\u0438\u043c\u0435\u043d\u0437\u0438\u0438': 0.008406336989671147, u'\u0434\u0430\u0432\u0430': 0.016812673979342295, u'\u0441\u0442\u0440\u0430\u043d\u0430': 0.008406336989671147}

plt.bar(*zip(*zip(count(), a.values())))
plt.title("Gaussian Histogram")
plt.xticks(*zip(*zip(count(0.4), a.keys())))
plt.xlabel("Value")
plt.ylabel("Frequency")

plt.show()

enter image description here


如果您没有 Arial 字体,您可以使用以下命令生成系统已知的字体文件列表

import matplotlib.font_manager as font_manager
print(sorted(font_manager.findSystemFonts()))

然后您可以使用以下命令尝试字体

prop = font_manager.FontProperties(fname=path)
mpl.rcParams['font.family'] = prop.get_name()

其中pathfindSystemFonts()返回的路径之一。

关于python - Unicode 字符渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635293/

相关文章:

python - matplotlib 改变子图的大小

python - Matplotlib 的 "interactive mode"(ion(), ioff()) 的确切语义?

python - 将 matplotlib 颜色图转换为 seaborn 调色板

python - Twisted 中激活多个事件

python - Matplotlib 散点图和颜色图的问题

python - 如何优雅地对 Pandas 中的一系列列表进行热编码

python - 如何从数据框制作 3D 条形图

python - 如何计算两个文本文档之间的相似度?

python - 如何使用 Python 的 DBAPI 来可移植地验证数据库模式?

python - 在 Python 中绘制两个正弦曲线的总和