使用matplotlib获取xkcd图表

16

目前的matplotlib版本(1.3.1)支持xkcd风格的绘图,但是当我按照基本指示生成这样的绘图时(在iPython 1.1.0中),

%pylab
plt.xkcd()
plt.plot(sin(linspace(0, 10)))
plt.title('Whoo Hoo!!!')

我得到

enter image description here

代替

enter image description here

我做错了什么?


3
相关吗?“另外,如果您想要与上面的字体相匹配,请确保在您的系统上下载并安装Humor Sans字体。为了让matplotlib识别它,您可能需要删除系统中的字体缓存。” - jbabey
1
你正在使用哪个后端来运行matplotlib?你可以通过plt.get_backend()进行检查。如果你已经安装了Qt4,可以尝试将其设置为*Agg后端,例如Qt4Agg。如果你在ipython笔记本中,也可以使用pylab的“inline”后端。参见此问题:https://github.com/matplotlib/matplotlib/issues/2269 - aganders3
plt.xkcd 命令需要调整一些参数来控制其执行的程度。请查看它的文档字符串以获取更多信息。 - Paul H
@aganders3:MacOSX。我无法切换到qt,因为这会导致我在尝试安装sip时遇到各种各样的错误。 - orome
@PaulH:对我来说提供这些参数没有任何影响。 - orome
显示剩余4条评论
4个回答

20
要让它正常工作,您需要:
  • matplotlib 1.3.1(与matplotlib 1.3.0或更早版本不兼容)
    • sudo pip install matplotlib --upgrade
  • 字体:Humor Sans
    • 这里这里下载并安装(在OS X上,您打开它并单击安装即可)
  • 删除matplotlib字体缓存(如DanHickstein在matplotlib/issues/2269中建议的那样
    • rm ~/.matplotlib/fontList.cache

现在,执行代码应该可以工作。

不需要将后端更改为TkAgg,正如某些人所建议的那样。对我来说,在'module://IPython.kernel.zmq.pylab.backend_inline'上它完美地工作(您可以通过plt.get_backend()检查它)。

(我遇到了同样的问题,并已解决,至少在OS X 10.8.5、matplotlib 1.3.1和IPython 2.0.0上;删除字体缓存是让字体运行的必要步骤。)


6
对于Ubuntu 14.04上的matplotlib 1.3.1版本,缓存位于~/.cache/matplotlib(不确定何时更改),删除缓存确实非常重要。 - Mark
对于在Ubuntu 12.04上使用的matplotlib 1.4.2同样适用。 - dranxo
也许在1.4.2版本中还有/tmp/xdgcache/matplotlib目录。 - liuyang1
1
matplotlib字体缓存在Win7上的路径为:%userprofile%.matplotlib\fontList.cache - 来源 - bastelflp
我还必须删除 fontList.py3k.cache - Svaberg
如下所建议,可以通过Python直接清除字体缓存,方法是import matplotlib然后matplotlib.font_manager._rebuild()。这应该是与平台无关的。 - Unis

4

如果您使用的是安装 matplotlib 2.0.0 的 ubuntu 16.04 和 python 3,下列操作可以帮助解决问题。

  1. 安装 Comic Sans 字体:sudo apt install fonts-humor-sans
  2. 删除 matplotlib 缓存:rm ~/.cache/matplotlib -r

1
请确保您已安装fonts-humor-sans
在Ubuntu/Debian中,您可以使用以下命令进行安装:

$ sudo apt install python3-xkcd fonts-humor-sans

然后最好的选择(而不是删除matplotlib缓存)是重新构建字体管理器(从Python解释器、脚本或Jupyter笔记本中):

import matplotlib
matplotlib.font_manager._rebuild()


0

来自你链接的博客文章

此外,如果你想要使用上面的字体,请确保在系统中下载并安装Humor Sans字体。为了让matplotlib识别它,你可能需要删除字体缓存...

至于下载哪个版本的字体,我建议尝试最新的版本。


1
我现在有字体了,但是线条还没有xkcd化。 - orome
@raxacoricofallapatorius 你是否使用了正确版本的matplotlib? - jbabey
我认为是这样的:在问题中添加了版本号。 - orome
@raxacoricofallapatorius 不知道,以前从未写过Python代码,只是觉得可能是缺失的字体:P - jbabey
@raxacoricofallapatorius:在安装字体后,必须清除matplptlib字体缓存:https://dev59.com/hF8e5IYBdhLWcg3wF3WV#26106170 - bastelflp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接