Python错题集-6:UserWarning: Glyph 20010missing from current font. f(字体错误)

1问题描述

C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 20010 (\N{CJK UNIFIED IDEOGRAPH-4E2A}) missing from current font. func(*args)
C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 24615 (\N{CJK UNIFIED IDEOGRAPH-6027}) missing from current font. func(*args)
C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 29980 (\N{CJK UNIFIED IDEOGRAPH-751C}) missing from current font.
  func(*args)
C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 22280 (\N{CJK UNIFIED IDEOGRAPH-5708}) missing from current font.
  func(*args)
C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 31867 (\N{CJK UNIFIED IDEOGRAPH-7C7B}) missing from current font.
  func(*args)
C:\Users\LHY\AppData\Local\Programs\Python\Python312\Lib\tkinter\__init__.py:861: UserWarning: Glyph 22411 (\N{CJK UNIFIED IDEOGRAPH-578B}) missing from current font.
  func(*args)

2代码详情

 

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化

fig, ax = plt.subplots(figsize=(10, 4.5),dpi=120,subplot_kw=dict(aspect="equal"))# 创建一个新的图形窗口,并设置其大小、分辨率和子图的属性
# 定义饼图的数据标签
recipe = ["类型1", "类型2", "类型3", "类型4", "类型5","类型6"]
# 定义饼图的数据值
data = [225, 90, 50, 60, 100, 5]
# 绘制饼图,设置扇区的宽度为0.5,起始角度为-40度
wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40)
# 定义一个字典,用于设置个性化文本箱子的样式
bbox_props = dict(boxstyle="square,pad=0.3", fc="g", ec="k", lw=0.72) #个性化文本箱子
# 定义一个字典,用于设置饼图扇区上标签的样式和位置
kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props,zorder=0,va="center")
# 遍历每个饼图扇区
for i, p in enumerate(wedges):
    ang = (p.theta2 - p.theta1) / 2. + p.theta1 # 计算扇区的中心角度
    # 根据中心角度计算扇区中心点的x和y坐标
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]# 根据x的正负值确定文本的水平对齐方式
    connectionstyle = "angle,angleA=0,angleB={}".format(ang)# 设置连接文本的样式,使其从扇区的中心指向标签的位置
    kw["arrowprops"].update({"connectionstyle": connectionstyle})# 更新箭头连接的样式
    # 在饼图扇区的中心位置添加标签,标签的文本为recipe列表中的对应项
    ax.annotate( recipe[i],xy=(x, y),xytext=(1.35 * np.sign(x), 1.4 * y),horizontalalignment=horizontalalignment,**kw)
ax.set_title("个性甜甜圈")# 设置图形的标题

plt.show()

3问题剖析

这个警告信息表示在当前的字体中缺少一个特定的中文字符(字形),具体是“\N{CJK UNIFIED IDEOGRAPH-4E2A}”,它对应的是中文字符“个”。这通常发生在使用某些绘图库(如matplotlib)时,尤其是当默认字体不支持所需的字符集时。

4问题解决

要解决这个问题,你可以尝试以下几种方法:

  1. 更换字体:选择一个支持中文的字体,并将其设置为绘图库的默认字体。例如,在matplotlib中,你可以使用plt.rcParams['font.sans-serif'] = ['SimHei']来设置字体为“SimHei”,这是一个常用的支持中文的字体。
  2. 确保字体文件可用:有时,尽管指定了正确的字体名称,但字体文件可能没有被正确安装或加载。确保你使用的字体文件已经安装在你的系统上,并且可以被绘图库访问。
  3. 手动指定字体文件:如果你知道字体文件的路径,你可以直接在代码中指定它。例如,在matplotlib中,你可以使用plt.rcParams['font.family'] = 'YourFontName'来指定字体名称,并通过plt.rcParams['font.fontpath'] = ['/path/to/your/font/']来指定字体文件的路径。
  4. 使用其他绘图方法:如果上述方法都无法解决问题,你可能需要考虑使用其他支持中文的绘图库或方法,或者先将文本转换为图像,然后再将其添加到绘图中。

注意事项:确保在尝试这些解决方案之前,你的系统中已经安装了所需的字体文件,并且这些字体文件是支持中文的。

plt.rcParams['font.sans-serif'] = ['SimHei']  # 运行配置参数中的字体(font)为黑体(simHei)

5修改后全文代码

# 导入相关库
import numpy as np  # 导入numpy库,用于处理数组和数值计算
import matplotlib.pyplot as plt  # 导入matplotlib的绘图模块,用于可视化
plt.rcParams['font.sans-serif'] = ['SimHei']  # 运行配置参数中的字体(font)为黑体(simHei)
fig, ax = plt.subplots(figsize=(10, 4.5),dpi=120,subplot_kw=dict(aspect="equal"))# 创建一个新的图形窗口,并设置其大小、分辨率和子图的属性
# 定义饼图的数据标签
recipe = ["类型1", "类型2", "类型3", "类型4", "类型5","类型6"]
# 定义饼图的数据值
data = [225, 90, 50, 60, 100, 5]
# 绘制饼图,设置扇区的宽度为0.5,起始角度为-40度
wedges, texts = ax.pie(data, wedgeprops=dict(width=0.5), startangle=-40)
# 定义一个字典,用于设置个性化文本箱子的样式
bbox_props = dict(boxstyle="square,pad=0.3", fc="g", ec="k", lw=0.72) #个性化文本箱子
# 定义一个字典,用于设置饼图扇区上标签的样式和位置
kw = dict(arrowprops=dict(arrowstyle="-"),bbox=bbox_props,zorder=0,va="center")
# 遍历每个饼图扇区
for i, p in enumerate(wedges):
    ang = (p.theta2 - p.theta1) / 2. + p.theta1 # 计算扇区的中心角度
    # 根据中心角度计算扇区中心点的x和y坐标
    y = np.sin(np.deg2rad(ang))
    x = np.cos(np.deg2rad(ang))
    horizontalalignment = {-1: "right", 1: "left"}[int(np.sign(x))]# 根据x的正负值确定文本的水平对齐方式
    connectionstyle = "angle,angleA=0,angleB={}".format(ang)# 设置连接文本的样式,使其从扇区的中心指向标签的位置
    kw["arrowprops"].update({"connectionstyle": connectionstyle})# 更新箭头连接的样式
    # 在饼图扇区的中心位置添加标签,标签的文本为recipe列表中的对应项
    ax.annotate( recipe[i],xy=(x, y),xytext=(1.35 * np.sign(x), 1.4 * y),horizontalalignment=horizontalalignment,**kw)
ax.set_title("个性甜甜圈")# 设置图形的标题

plt.show()

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Py小趴

整理不易,感谢金主!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值