Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib:投影打印网格线上的标签类似于clabel()_Python_Matplotlib_Plot_Astropy - Fatal编程技术网

Python Matplotlib:投影打印网格线上的标签类似于clabel()

Python Matplotlib:投影打印网格线上的标签类似于clabel(),python,matplotlib,plot,astropy,Python,Matplotlib,Plot,Astropy,我正在使用Astropy WCS软件包对各种球形投影图进行大量工作,但在网格线方面遇到了一些挫折。由于网格线并不总是与图像边界框相交或多条网格线在同一位置相交,因此网格线可能未标记或其标签无法辨认。我希望能够在每条线中插入网格线标签,这与应用于等高线图的函数非常相似,如本文所示。我不能嵌入图像,因为我是一个新用户;我道歉 我知道我可以使用text()、figtext()或annotate()放置标签,但由于clabel()工作,我认为该功能已经存在,即使它尚未应用于网格线。抛开投影绘图不谈,有人

我正在使用Astropy WCS软件包对各种球形投影图进行大量工作,但在网格线方面遇到了一些挫折。由于网格线并不总是与图像边界框相交或多条网格线在同一位置相交,因此网格线可能未标记或其标签无法辨认。我希望能够在每条线中插入网格线标签,这与应用于等高线图的函数非常相似,如本文所示。我不能嵌入图像,因为我是一个新用户;我道歉


我知道我可以使用text()、figtext()或annotate()放置标签,但由于clabel()工作,我认为该功能已经存在,即使它尚未应用于网格线。抛开投影绘图不谈,有人知道类似于clabel()的内嵌网格线标签可以应用于普通矩形绘图上的网格线的方法吗?

要注释网格线,可以使用主刻度的位置(因为这些是创建网格线的位置)


clabel(cs,**kwargs)
cs
中为线条轮廓添加标签,其中
cs
是由
轮廓返回的轮廓集对象。因此您有两个选项:(a)使用等高线图绘制网格线,然后使用clabel标记线(b)使用普通网格线并编写自定义函数来标记线。您需要哪一个帮助?顺便说一句,新用户可以发布图像,这些图像将显示为链接而不是内联。@ImportanceOfBeingErnest我不能包含两个以上的链接,否则我将包含两个图像。我没有考虑选择(a);我喜欢这个想法,但我觉得如果不进行无谓的调整,就很难实现许多不同的情节。因此,我想选择(b);我希望找到一些聪明的方法,从clabel()复制功能,而不是从头开始编写自定义网格线标签函数。谢谢,这非常有帮助!这不是很理想,因为每个绘图都需要硬编码(以避免尽可能多地掩盖数据等),但这是朝着正确方向迈出的一步。我觉得可以从clabel()中提取一些代码,并将其应用于网格线,而不是等高线,但我对matplotlib不够精通,不知道如何做到这一点。你总是可以让事情变得比需要的更复杂。长度为500行,拟与
ContourSet
s一起使用。为了使用它,网格线也需要是
轮廓集
。但与上述答案中的4行代码相比,这基本上没有什么好处。
import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0,10)
y = np.sin(x)*10

fig, ax = plt.subplots()
ax.plot(x,y)
ax.grid()

for xi in ax.xaxis.get_majorticklocs():
    ax.text(xi,0.8, "{:.2f}".format(xi), clip_on=True, ha="center",
            transform=ax.get_xaxis_transform(), rotation=90,
            bbox={'facecolor':'w', 'pad':1, "edgecolor":"None"})
for yi in ax.yaxis.get_majorticklocs():
    ax.text(0.86,yi, "{:.2f}".format(yi), clip_on=True, va="center",
            transform=ax.get_yaxis_transform(), 
            bbox={'facecolor':'w', 'pad':1, "edgecolor":"None"})

plt.show()