我已经通过不同的滤镜获得了许多星系图像.每行子图表示一个具有唯一“ 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()