简体   繁体   English

如何让matplotlib和乳胶一起工作?

[英]How to get matplotlib and latex work together?

I have the following problem and I am totally new to matplotlib and python: To produce high qualitiy plots for my thesis I want to use matplotlib and I want to use the latex commands for the axes etc. When I try the following example (from http://matplotlib.org/users/usetex.html#usetex-tutorial ): 我有以下问题,我对matplotlib和python完全是新手:要为我的论文制作高质量图我想使用matplotlib,我想使用乳胶命令为轴等。当我尝试以下示例时(来自http ://matplotlib.org/users/usetex.html#usetex-tutorial ):

import numpy as np 
import matplotlib.pyplot as plt


# Example data 
t = np.arange(0.0, 1.0 + 0.01, 0.01) 
s = np.cos(4 * np.pi * t) + 2

plt.rc('text', usetex=True) 
plt.rc('font', family='serif') 
plt.plot(t, s)

plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16) 
plt.title(r"\TeX\ is Number "
          r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
          fontsize=16, color='gray')
# Make room for the ridiculously large title. 
plt.subplots_adjust(top=0.8)

plt.savefig('tex_demo') 
plt.show()

I get the following message: 我收到以下消息:

  File "test.py", line 21, in <module>
    plt.savefig('tex_demo')
  File "/usr/lib/pymodules/python2.7/matplotlib/pyplot.py", line 561, in savefig
    return fig.savefig(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/figure.py", line 1421, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backend_bases.py", line 2220, in print_figure
    **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_agg.py", line 505, in print_png
    FigureCanvasAgg.draw(self)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_agg.py", line 451, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib/pymodules/python2.7/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/figure.py", line 1034, in draw
    func(*args)
  File "/usr/lib/pymodules/python2.7/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 2086, in draw
    a.draw(renderer)
  File "/usr/lib/pymodules/python2.7/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/axis.py", line 1105, in draw
    self.label.draw(renderer)
  File "/usr/lib/pymodules/python2.7/matplotlib/artist.py", line 55, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "/usr/lib/pymodules/python2.7/matplotlib/text.py", line 594, in draw
    self._fontproperties, angle, mtext=self)
  File "/usr/lib/pymodules/python2.7/matplotlib/backends/backend_agg.py", line 241, in draw_tex
    self._renderer.draw_text_image(Z, x, y, angle, gc)
OverflowError: cannot convert float infinity to integer

I'm new to Linux (Ubuntu 14.04) and maybe have done something wrong when installing matplotlib; 我是Linux新手(Ubuntu 14.04),安装matplotlib时可能做错了。 here is what I have done to install matplotlib etc.: 这是我安装matplotlib等所做的:

sudo apt-get install python3
sudo apt-get install python-matplotlib
sudo apt-get build-dep python-matplotlib

I am using texmaker and thought this could be the problem; 我正在使用texmaker,并认为这可能是问题; so I did the following: 所以我做了以下事情:

sudo aptitude install texlive-fonts-recommended texlive-fonts-extra

If I try any other plots including latex commands I get similar error messages, or plots without any lables for the axes. 如果我尝试任何其他包括乳胶命令的图表,我会得到类似的错误信息,或者没有任何标签的图表。

Your problem has been seen before as reported here on the matplotlib-user mailing list . 之前已经在matplotlib-user邮件列表中报告了您的问题。 The resolution is here and the confirmation that it works is here . 决议在这里 ,确认它的工作原理在这里

In summary, you need to clear the tex.cache directory. 总之,您需要清除tex.cache目录。

To find where that directory is - go into python and execute matplotlib.get_cachedir() 要找到该目录的位置 - 进入python并执行matplotlib.get_cachedir()

For a standard Ubuntu 14.04 install - you should get something like the following: 对于标准的Ubuntu 14.04安装 - 您应该得到如下内容:

~$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import matplotlib as mpl
>>> mpl.get_cachedir()
'/home/<username>/.cache/matplotlib'

Then do rm <path/to/cache/from/above>/tex.cache/* and then re-run and it should all work. 然后执行rm <path/to/cache/from/above>/tex.cache/*然后重新运行它应该全部工作。


Docs issue 文件问题

Some tips like this are available in the usetex troubleshooting docs section , which lead to here to locate the directory, but they unfortunately don't mention get_cachedir() usetex故障排除文档部分中提供了类似这样的一些提示,这些提示可以在此处找到目录, 但遗憾的是它们没有提到get_cachedir()

Edit Pull Request generated based on this question and merged into the matplotlib docs. 编辑基于此问题生成的Pull Request并合并到matplotlib文档中。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM