【问题标题】:Negative numbers don't display correctly in matplotlib xkcd style负数在 matplotlib xkcd 样式中无法正确显示
【发布时间】:2014-11-27 21:58:17
【问题描述】:

我一直在使用 matplotlib 中的 xkcd 样式功能。我有 Matplotlib 1.4,并且幽默无字体安装正确,或者至少在 msword 中工作。

当我运行以下示例代码时,我得到“?”任何时候都应该有一个负数,而不是标签上的“-”。知道是什么原因造成的吗?

with plt.xkcd():
  plt.figure()
  plt.plot(np.sin(np.linspace(0, 10)))
  plt.title('Whoo Hoo!!!')

编辑:根据伯尼的建议(感谢伯尼),我尝试了一些不同的后端。尝试了 Qt、Tkinter 和内联,但似乎都没有工作。我正在使用 Ipython 2.3 顺便说一句。

此外,现在的声誉已经高到可以发布图片了。如您所见,除了那些讨厌的问号外,一切都按预期进行。

【问题讨论】:

  • 负值在我的测试图中正确显示。您使用的是哪个后端?您可以通过以下方式找到:import matplotlib; matplotlib.get_backend()
  • 伯尼,我使用的是 QT4Agg 。我切换到 IPython 内联后端“模块://IPython.kernel.zmq.pylab.backend_inline”,除了它显示内联之外,我得到了相同的结果。尝试过 Tkinter (TkAgg) 也不起作用。很奇怪。
  • 我也无法重现这个,所以这可能与您的字体安装有关。也许检查 Word 中没有减号的实际幽默,看看该符号是否有效?
  • 请注意,键盘上的减号不必是 XKCD 图中使用的减号。有一个difference between a hyphen, minus sign, n-dash and m-dash。所以它确实可能仍然是一个字体问题,除非你在 Word 中尝试了所有各种连字符/减号/破折号。
  • 它在 Linux 中为我使用“减号”(即 U+2212),而不是 ASCII“连字符减号”。 plt.ion(); with plt.xkcd(): p, = plt.plot(np.sin(np.linspace(0, 10)));c = p.axes.yaxis.get_ticklabels()[0].get_text()[0];ord(c) == 0x2212;unicodedata.name(c) == 'MINUS SIGN'。在 Windows 上,“?”在编码为代码页(例如 1252)时,通常替换为未映射的字符。

标签: python matplotlib


【解决方案1】:

eryksun 的评论是正确的。因此,您必须将减号 (U+2212) 字符添加到 xkcd 字体 (hunour sans)。 为此,请使用字体编辑器(我使用了FontForge):

  1. 从 FontForge 菜单中,打开 Humor Sans ttf 文件。
  2. 将 HYPHEN-MINUS (U+002d) 字形复制粘贴到 MINUS SIGN (U+2212) 字符框中(它们按 Unicode 编号递增的顺序排列)。
  3. 转到文件 -> 生成字体。选择 True Type (.ttf) 并将其保存在与字体文件夹不同的文件夹中。
  4. 安装新保存的字体。 (在 Windows 上,双击打开预览窗口,然后点击安装)

我和你有同样的问题,解决了。

【讨论】:

  • 感谢 Ludo 和 Eryksun,他们成功了。顺便说一句,您链接到的 FontForge 版本在我的 win7 机器上反复崩溃。我使用位于此处的 Windows 构建完成了它:fontforgebuilds.sourceforge.net
猜你喜欢
  • 2019-12-28
  • 2021-06-25
  • 2022-09-25
  • 2016-07-07
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 2012-03-26
  • 2012-09-23
相关资源
最近更新 更多