2017-10-06 160 views
0

我试图在散点图中使用乳胶符号\odot作为标记,但我也需要乳胶样式滴答,但由于某些原因,这两者在一起播放不好。我可以成功使用marker=$\\odot$usetex=False,like this,但是当我将它设置为true时(为了得到正确的刻度),我得到了! LaTeX Error: File 'type1cm.sty' not found.我已经通过确认我已经安装了sty文件并且在正确的目录中并且我已经安装了所有依赖项(如建议here)。此外,我仍然可以使用usetex=True并使用任何正常的pyplot标记,只是不涉及任何数学字体,但是我可以在图例的标签中使用\odot。我也试着用amsmath附加rc params,但仍然得到type1cm错误。我也尝试使用原始字符串文字无济于事。当使用 odot作为标记时,Matplotlib /乳胶问题

所以基本上当usetex=True时,我可以在图例的标签中使用数学符号,而不是实际的标记。有没有人遇到过这个问题?

我目前的工作只涉及绘制一个大的未填充圆和绘制一个小的实心圆(基本上模拟odot)。然后我遇到了一个与传说有关的问题,所以我基本上必须创建一个透明的图例来显示大的未填充的圆,然后用手like this在它后面绘制较小的实心圆,最终会出现歪斜,但这有我需要的轴刻度字体。如果我必须改变坐标轴的极限,这会变得非常令人沮丧,因为我必须重复确定在哪里再次绘制小的实心圆的过程。

有谁知道是否有比这更好的工作?是否有可能像我一样使用重叠打印方案,然后创建一个自定义代理艺术家以在图例中显示\odot符号(以不同的颜色/大小)?

的Mac OSX,matplotlib 1.4.2,蟒蛇2.7,matplotlib使用pdfTeX的通TeX Live中2017年/ MAC端口2017年

编辑:这是我的代码

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

f, ax1 = plt.subplots(1,1) 
x = np.arange(20) 
y = x 

ax1.scatter(x, y, marker='$\\odot$', edgecolors='b', s=200, label = 'Test') #used with usetex=False 
#ax1.scatter(x, y, marker='o', edgecolors='b', s=200, label = 'Test') #used with usetex=True 


ax1.tick_params(labelsize=24) 
leg = ax1.legend(scatterpoints=1, loc='lower right', borderaxespad=0., handletextpad=0.)#, fontsize=18) # borderpad=0.,) 
+0

它会是更新matplotlib的选项吗?看来你的版本比较老。我不知道这是否会解决问题,因为它可能会取决于你的tex安装。至于解决方法,您需要使用乳胶的原因究竟是什么?也许你可以使用一种类似于你想要的乳胶字体的字体? (请参阅,例如[这个问题](https://stackoverflow.com/questions/42249945/matplotlib-2-inconsistent-font)) – ImportanceOfBeingErnest

+0

我需要有乳胶格式化的蜱与我的一些其他情节一致。什么字体会模仿乳胶风格?将字体设置为更改刻度? – Courtney

+0

尝试用更新的matplotlib 2.0.2创建一个新的conda env,并且仍然有相同的结果。 – Courtney

回答

0

我不知道怎么样多少我可以帮没有看到你的代码,但是这个工作对我来说:

import numpy as np 
import matplotlib as mpl 
import matplotlib.pyplot as plt 

x1 = [1,2]; x2 = [1,2] 
y1 = [1,1]; y2 = [2,2] 

mpl.rc('text', usetex = True) 
fig, ax = plt.subplots(1,1) 
ax.scatter(x1,y1, label='A1', marker=r'$\odot$',s=150, c='b') 
ax.scatter(x2,y2, label='A2', marker=r'$\odot$',s=50, c='b') 
ax.set_xlim(0,3) 
ax.set_ylim(0,3) 
ax.legend() 
fig.show() 

enter image description here

如果这不能让我知道!

+0

我的代码看起来几乎完全像这样。我编辑了我的问题以包含我的内容。我试过'marker = r'$ \ odot $'','='$ \ odot $'','= r'$ \\ odot $'和'='$ \\ odot $''和所有'usetex-True'时给出相同的'type1cm.sty文件未找到'。我也尝试了设置'usetex = True'的所有不同命令,并且尝试在'workingtex = True'的工作目录中有一个单独的matplotlibrc文件,当我使用'\ odot'时,所有东西仍然会出现type1cm错误一个标记。 – Courtney