使用\odot as m时出现Matplotlib/Latex问题

2024-06-02 17:22:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用乳胶符号\odot作为散点图中的标记,但我也需要乳胶样式的记号,但由于某些原因,这两个不能很好地配合使用。我可以成功地将marker=$\\odot$usetex=Falselike this一起使用,但是当我将其设置为true时(为了正确地使用tick字体),我得到了{}我已经检查过了,以确保我已经安装了sty文件并在正确的目录中,并且我已经安装了所有的依赖项(如建议的here)。另外,我仍然可以使用usetex=True并使用任何普通的pyplot标记,只是不涉及数学字体,但是可以在图例的标签中使用\odot。我也已经尝试过用amsmath附加rc params,但是仍然得到type1cm错误。我也尝试过使用原始字符串文本,但没有效果。在

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

我目前的工作是绘制一个大的未填充的圆,并对一个小的填充圆进行过度绘制(基本上是模拟odot)。然后我遇到了一个关于图例的问题,所以我基本上必须创建一个透明的图例来显示大的未填充的圆,然后用手在后面画出较小的填充圆like this,结果不稳定,但这有我需要的轴刻度字体。如果我必须改变轴的限制,这会变得非常令人沮丧,因为我必须重复这个过程,找出在哪里画出填充的小圆圈。在

有人知道有没有比这更好的工作?是否可以像我以前那样使用过绘图方案,然后创建一个自定义代理美工来在图例中显示\odot符号(以不同的颜色/大小)?在

Mac OSX、matplotlib 1.4.2、python 2.7、matplotlib使用的是pdfTeX Throu TeX Live 2017/Mac Ports 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.,)

Tags: 标记falsetrue字体符号pltthismarker
1条回答
网友
1楼 · 发布于 2024-06-02 17:22:05

我不知道在没有看到你的代码的情况下我能帮上多少忙,但这对我很有用:

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

如果这没用的话告诉我!在

相关问题 更多 >