python-使文本显示在子图图像的前面

我已经通过不同的滤镜获得了许多星系图像.每行子图表示一个具有唯一“ ID”的新对象.我使用子图功能绘制了所有这些图像,但是在添加ID名称时遇到了麻烦.理想情况下,ID可以延伸到多个子图的前面,但此刻它位于后面(参见图片).有人知道解决此问题的方法吗?

plt.close('all')
ID=np.array([])
cata=csv.reader(open('final_final_list.csv',"rU"))
for x in cata:
    ID=np.append(ID,x[0])    
filterset=['ugr','i1','z','Y','J','H','Ks']
test2=np.array([])
for i in range(0,len(ID)):
    for j in range(0,len(filterset)):
       test2=np.append(test2,'filt_image/'+ID[i]+'/'+filterset[j]+'.png')
ID2=np.repeat(ID,7)
filterset2=filterset*64
array=np.arange(0,140,7)
plt.figure()
for i in range(0,140):
    plt.subplot(20,7,i+1)
    plots=img.imread(test2[i])
    plt.imshow(plots)
    plt.axis('off')
    plt.text(0,100,filterset2[i],fontsize='10')

for i in array:
    plt.subplot(20,7,i+1)
    plt.annotate(ID2[i],xy=(0,300),xytext=(0,300),fontsize='10')
plt.show()

解决方法:

每次在图形中创建子图时,关联的“轴”对象都会追加到幕后的列表中.默认情况下,轴以添加到该列表的顺序绘制,即创建子图的顺序.在您的示例中,第一列中的每个图都在第二列中的相邻元素之前立即添加,因此最终后者会在前者之上绘制.

幸运的是,Matplotlib具有zorder属性,可让您控制事物绘制的顺序.在这种情况下,您需要将第一列中所有轴的zorder设置为大于默认值0的任何整数(较高的值在后面/较低的值之上绘制).这是一个示例,其中底行已调整,但顶行未调整:

#!/usr/bin/env python

import matplotlib.pyplot as plt
import numpy as np

Z = np.random.random((5,5))
txt = "abcdefghijlkmopqrstuvwxyz" * 2

F, A = plt.subplots(ncols=2,nrows=2)

for ax in A.flat:
    ax.imshow(Z,interpolation="nearest")
    ax.axis("off")

for ax in A[:,0].flat:
    ax.text(0,0,txt)
# Uncomment the next line to adjust all plots in column one.
#    ax.set_zorder(1)

# The next line just adjusts one plot, as an example.
A[1,0].set_zorder(1)

plt.show()
上一篇:python – 如何在matplotlib中获得多个子图?


下一篇:python数据可视化之 Matplotlib