对于我的研究报告,我编写了一个自定义模块,其中包含2个为我的报告制作图像的功能:
process_mods.py
:
def make_image(image, filename, color_map, title):
'''
Take as arguments an array, the filename to save as, a color map, and
a title for the image.
Produces a publication-quality image of the array, rescaled to Galactic
coordinates.
'''
l_max = 25
b_max = 15
xlabel = r'Galactic longitude $\ell$ (deg)'
ylabel = r'Galactic latitude $b$ (deg)'
plt.imshow(image, origin='lower',
extent=[l_max, -l_max, -b_max, b_max],
cmap = color_map)
plt.title(title, fontsize = 'small')
plt.xlabel(xlabel, fontsize = 'small')
plt.ylabel(ylabel, fontsize = 'small')
plt.savefig(filename + '.png',
transparent=False,
bbox_inches='tight',
overwrite = True)
def make_image_colorbar(image, filename, color_map, title):
'''
Take as arguments an array, the filename to save as, a color map, and
a title for the image.
Produces a publication-quality image of the array, rescaled to Galactic
coordinates, including color bar.
'''
l_max = 25
b_max = 15
xlabel = r'Galactic longitude $\ell$ (deg)'
ylabel = r'Galactic latitude $b$ (deg)'
ax = plt.subplot(111)
fig =ax.imshow(image, origin='lower',
extent=[l_max, -l_max, -b_max, b_max],
cmap = color_map)
plt.colorbar(fig, fraction = 0.028)
plt.title(title, fontsize = 'small')
plt.xlabel(xlabel, fontsize = 'small')
plt.ylabel(ylabel, fontsize = 'small')
plt.savefig(filename + '.png',
transparent=False,
bbox_inches='tight',
overwrite = True)
make_image
函数按预期工作,make_image_colorbar
的想法只是在图像中包含一个颜色条。
当我在两个连续的数组上调用make_image_colorbar
函数时,第一个看起来很好,但第二个有两个颜色条,一个是自己的,另一个是第一个图像。这是我用来测试模块的代码:
import process_mods as pm
arr1 = pm.create_random_array(0, 100, 10, 12, 5)
arr2 = pm.create_random_array(0, 100, 10, 12, 10)
pm.make_image(arr1, 'arr1', 'spectral', 'Array1')
pm.make_image_colorbar(arr2, 'arr2', 'spectral', 'Array2')
此测试使用
def create_random_array(low, high, height, width, seed):
'''
Create a random array of floats from lower_limit to upper_limit
in a height x width matrix
'''
np.random.seed(seed)
random_array = high * np.random.rand(height, width) + low
return random_array
这是来自process_mods
的另一个函数,但我不认为这就是问题所在。
任何人都可以看到我如何阻止该功能在arr1
上打印arr2
的彩条?
答案 0 :(得分:0)
我认为混淆来自于没有意识到你正在绘制的图形/轴。我发现使用matplotlib
的面向对象的界面可以让你更清楚地使用哪些轴。
我对您的代码所做的更改是在主脚本中创建数字,并在调用process_mode.py
中定义的函数时将它们作为参数传递。通过这种方式,您可以确定绘图的位置。此外,您可以将ax
参数传递给plt.colorbar()
,以指定它适用的轴:
plt.colorbar(im, ax=ax)
make_image_colorbar
中的 process_mods.py
将成为:
def make_image_colorbar(image, fig, ax, filename, color_map, title):
l_max = 25
b_max = 15
xlabel = r'Galactic longitude $\ell$ (deg)'
ylabel = r'Galactic latitude $b$ (deg)'
im = ax.imshow(image, origin='lower',
extent=[l_max, -l_max, -b_max, b_max],
cmap = color_map)
fig.colorbar(im, fraction = 0.028, ax = ax)
ax.set_title(title, fontsize = 'small')
ax.set_xlabel(xlabel, fontsize = 'small')
ax.set_ylabel(ylabel, fontsize = 'small')
fig.savefig(filename + '.png',
transparent=False,
bbox_inches='tight',
overwrite = True)
注意:我删除了文档字符串只是为了让这个答案更容易阅读
你可能(可能应该保持一致)对make_image
您的主要功能将如下所示。
import process_mods as pm
arr1 = pm.create_random_array(0, 100, 10, 12, 5)
arr2 = pm.create_random_array(0, 100, 10, 12, 10)
fig1, ax1 = plt.subplots()
fig2, ax2 = plt.subplots()
pm.make_image_colorbar(arr1, fig1, ax1, 'arr1', 'spectral', 'Array1')
pm.make_image_colorbar(arr2, fig2, ax2, 'arr2', 'spectral', 'Array2')
plt.show()
给出了: