python 绘图库Matplotlib-,matplotlib绘制图形
郑码是兰道尔门罗(RandallMunroe)的网名,又是他所创作的漫画的名称。本文将用绘制精美的图表库绘制郑码动漫风格的图表,感兴趣的可以了解一下
目录
XKCDmatplotlib对郑码风格的支持创建郑码风格的图表使用中文字体创建郑码风格的图表1.安装字体2.更新中文字体
XKCD
郑码是兰道尔门罗(兰道尔门罗)的网名,又是他所创作的漫画的名称。作者兰道尔门罗(兰道尔门罗)给作品的定义是一部"关于浪漫、讽刺、数学和语言的网络漫画"(浪漫、讽刺、数学和语言的网络漫画),被网友誉为深度宅向网络漫画XKCD .官方网站https://xkcd.com/。
matplotlib对XKCD风格的支持
matplotlib.pyplot.xkcd函数可绘制郑码风格的图表。
原理非常简单,调用函数时保存原有rcParams设置,再更新rcParams使预置的郑码风格的生效,退出时还原rcParams设置。
郑码相关定义如下:
def xkcd(比例=1,长度=100,随机性=2):
return _xkcd(小数位数、长度、随机性)
class _xkcd:
#这不能根据rc_context()来实现,因为这需要
#也做一名非上下文经理。
def __init__(自身,规模,长度,随机性):
自我. orig=rcParams.copy()
if rcParams[text.usetex]:
引发运行时间错误(
郑码模式与 text.usetex=True 不兼容
从绘制精美的图表导入路径效果
rcParams.update({
: [xkcd , xkcd脚本,幽默无,漫画新的,
漫画无女士],
font.size: 14.0,
path.sketch:(比例、长度、随机性),
path.effects: [
路径效应。用stroke(线宽=4,前景=w)],
axes.linewidth: 1.5,
lines.linewidth: 2.0,
figure.facecolor: 白色,
grid.linewidth: 0.0,
axes.grid: False,
axes.unicode_minus: False,
axes.edgecolor: 黑色,
xtick.major.size: 8,
xtick.major.width: 3,
ytick.major.size: 8,
ytick.major.width: 3,
})
def __enter__(self):
回归自我
def __exit__(self,*args):
dict.update(rcParams,self ._orig)
pre>
创建XKCD风格的图表
官方建议使用上下文管理器调用xkcd函数。
import matplotlib.pyplot as pltwith plt.xkcd():
plt.bar([1,2,3],[1,2,3])
plt.title(test)
plt.show()
使用中文字体创建XKCD风格的图表
官方文档建议下载Humor Sans字体,根据源码可知,'font.family': ['xkcd', 'xkcd Script', 'Humor Sans', 'Comic Neue', 'Comic Sans MS'],只要计算机上安装这几个字体,英文都可以显示为XKCD风格,现在Windows操作系统中基本都预装有Comic Sans MS字体,因此,不用下载字体即可显示英文。
xkcd默认配置的几个字体都不支持中文,如果像在XKCD风格图表中使用类似漫画风格的中文就需要下载中文字体,一般大家都推荐试用方正卡通简体字体。下载安装该字体后,只用重载字体缓存,修改rcParams['font.family']使中文字体生效即可。
1.安装字体
下载方正卡通简体字体,并进行安装。
2.更新中文字体
获取方正卡通简体字体的系统名称
方正卡通简体字体在系统中的名称为FZKaTong-M19S。
设置方正卡通简体字体为中文默认字体
import matplotlib.pyplot as pltplt.xkcd()
plt.rcParams.update({font.family: "FZKaTong-M19S"})
plt.bar([1,2,3],[1,2,3])
plt.title("测试")
plt.show()
运行后,标题中文不能正常显示,调试信息显示找不到'FZKaTong-M19S',所以使用默认的DejaVu Sans的字体。
findfont: Font family [FZKaTong-M19S] not found. Falling back to DejaVu Sans.
通过以下代码验证,可知'FZKaTong-M19S'即方正卡通简体字体没有出现在ttflist当中,所以找不到该字体。而ttflist是读取字体缓存而构建的,因此,重建字体缓存可能解决这个问题。
from matplotlib.font_manager import fontManagerprint([i.name for i in fontManager.ttflist if FZKaTong-M19S in i.name])
解决问题
默认findfont函数是从字体缓存中查找的,新安装的字体缓存中没有,因此,需要重新创建缓存,并加载。
# 重建字体缓存from matplotlib.font_manager import _rebuild
_rebuild()
import matplotlib.pyplot as pltplt.xkcd()
plt.rcParams.update({font.family: "FZKaTong-M19S"})
# plt.rcParams[font.family] =FZKaTong-M19S
# plt.rc(font, **{family : FZKaTong-M19S})
plt.bar([1,2,3],[1,2,3])
plt.title("测试")
plt.show()
到此这篇关于Python matplotlib绘制xkcd动漫风格的图表的文章就介绍到这了,更多相关Python matplotlib动漫图表内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。