Python - 无需使用ax.text的颜色编码标签?

2024-09-22 16:23:36 发布

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

虽然使用matplotlib的图例模块可以区分地标记我的绘图,但是我想使用颜色标签来标记我的绘图,比如(不带线条):

enter image description here

如果我要在绘图中进行此操作,我将使用text模块放入具有相同颜色的标签。例如,在我的绘图中:

fig6 = plt.figure()
VelCumullog = fig6.add_subplot(111)


VelCumullog.plot(VelCumu[0], VelCumu[1], color = 'slateblue', label = 'Illustris-1')
VelCumullog.plot(VelCumuD[0], VelCumuD[1], color = 'crimson',  label = 'Illustris-1-Dark')
VelCumullog.set_xscale('log')
VelCumullog.set_yscale('log')
VelCumullog.set_xlim(50,500)
VelCumullog.set_ylim(1,5000)
VelCumullog.set_xlabel('$\mathrm{Velocity\ Relative\ to\ Host}\ [\mathrm{km}\ \mathrm{s}^{-1}]$')
VelCumullog.set_ylabel('$N\ (>v_{\mathrm{rel}})$ ', labelpad=-1)
VelCumullog.set_xticks([100, 1000])
VelCumullog.set_yticks([10, 100, 1000])
VelCumullog.get_xaxis().set_major_formatter(tic.ScalarFormatter())
VelCumullog.get_yaxis().set_major_formatter(tic.ScalarFormatter())
#VelCumullog.legend(loc='upper left', frameon=False)
VelCumullog.text(60, 2800, 'Illustris-1', color='slateblue')
VelCumullog.text(60, 1800, 'Illustris-1-Dark', color='crimson')

enter image description here

在你看到我的地方,只需使用text而不是legend。在

但是,如你所见,如果我在其他的绘图中使用这种方法,那么在绘图上随意地放置标签会变得相当乏味,因为我必须定义它们的坐标。尤其是如果文本之间的间距与绘图中的其他文本相比是关闭的。在

我想知道他们是否是我想做的另一种方法,比如使用legends模块,或者其他让我的生活更轻松的方法。在


Tags: 模块方法text标记绘图plot颜色标签
1条回答
网友
1楼 · 发布于 2024-09-22 16:23:36

如果我理解正确,您希望您的图例没有线条,并有文字颜色。我们可以在调用legend时设置handlelength=0,并手动更改文本颜色。在

以下是我的工作:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
import matplotlib.ticker as tic
fig6 = plt.figure()
VelCumullog = fig6.add_subplot(111)

VelCumu = [np.arange(0,1000,1.0)]
VelCumu.append(1000-2.0*VelCumu[0])
VelCumuD = [np.arange(0,1000,1.0)]
VelCumuD.append(1200-2.0*VelCumu[0])

VelCumullog.plot(VelCumu[0], VelCumu[1], color = 'slateblue', label = 'Illustris-1')
VelCumullog.plot(VelCumuD[0], VelCumuD[1], color = 'crimson',  label = 'Illustris-1-Dark')
VelCumullog.set_xscale('log')
VelCumullog.set_yscale('log')
VelCumullog.set_xlim(50,500)
VelCumullog.set_ylim(1,5000)
VelCumullog.set_xlabel('$\mathrm{Velocity\ Relative\ to\ Host}\ [\mathrm{km}\ \mathrm{s}^{-1}]$')
VelCumullog.set_ylabel('$N\ (>v_{\mathrm{rel}})$ ', labelpad=-1)
VelCumullog.set_xticks([100, 1000])
VelCumullog.set_yticks([10, 100, 1000])
VelCumullog.get_xaxis().set_major_formatter(tic.ScalarFormatter())
VelCumullog.get_yaxis().set_major_formatter(tic.ScalarFormatter())
l = VelCumullog.legend(loc='upper left', frameon=False, handlelength=0)
l.get_texts()[0].set_color('slateblue')
l.get_texts()[1].set_color('crimson')

plt.show()

enter image description here

如果不起作用,您可以尝试将绘制图例图形的Artist更改为一个不可见的框:

^{pr2}$

请注意,我还设置了handletextpad=0,这可能有助于解决某些对齐问题(删除不可见的艺术家和标签之间的空间)。在

相关问题 更多 >