2013-07-27 135 views
3

我正在尝试在Xcode中使用Matplotlib & Python来生成科学图形。我的老板希望他们在LaTeX中使用匹配的字体。我知道你可以像这样修改字体在python:python乳胶字体xcode

from matplotlib import rc 
rc('font',**{'family':'serif','serif':['Computer Modern Roman']}) 
rc('text', usetex=True) 

不幸的是,打开或保存与plt.show()plt.savefig()图中给出了错误的字符串,最终导致OSError: [Errno 2] No such file or directory

我知道“Google是你的朋友”,但我还没有设法找到任何关于如何去解决这个问题。任何帮助将不胜感激。

+0

[与OSX 10.8中的usetex问题]可能的重复(http://stackoverflow.com/questions/11797480/problems-with-usetex-in-osx-10-8) – hooy

+0

链接问题中的答案之一解决了这个问题,谢谢!将/ usr/texbin中的胶乳路径添加到允许胶乳字体的方案中的xcode环境中。 – pgierz

回答

1

我通常发现它最简单直接指定字体文件我后。这里有一个例子:

import matplotlib.pyplot as plt 
import matplotlib.font_manager 
from numpy import * 

# cmunso.otf is a randomly selected font in my tex installation 
path = '/usr/local/texlive/2012/texmf-dist/fonts/opentype/public/cm-unicode/cmunso.otf' 
f0 = matplotlib.font_manager.FontProperties()  
f0.set_file(path) 

plt.figure() 
plt.xlim(0,1.) 
plt.ylim(0,1.) 

d = arange(0, 1, .1) 
plt.plot(d, d, "ob", label='example') 

plt.text(.5, .1, 'text.. abcdef', fontproperties=f0, size=30) 
plt.xlabel("x label", fontproperties=f0) 
plt.legend(prop=f0, loc=2) 

enter image description here

我不是字体的专家,但我认为这是比较容易的原因是,字体的选择往往有当您指定的方式进行级联组缺省值字体与系统不完全匹配。但是,该文件很容易找到并指定(尽管它明显不便于携带)。

注意,对于xlabeltext关键词是fontpropertieslegend这是prop

+1

该解决方案的一个“缺点”是数学正在使用mathtext(使用指定的字体)而不是真正的LaTeX进行处理,从而给出了稍微不同的最终结果。 – hooy

+0

虽然我最终使用了不同的方法来解决此问题,但此处介绍的解决方案可以运行,并且对其他潜在应用程序很有用。如果我正确地理解了它,你可以使用它来获取任何字体,而不仅仅是Python本能地知道的。 – pgierz