首页 > 解决方案 > Matplotlib 相邻图

问题描述

我编写了一个 Python 库,它使用 Matplotlib 和 Astropy 从太阳无线电发射数据生成光谱。我对它从单个 FITS 文件中绘制数据的方式感到满意,但现在我正尝试在单个图中相邻地绘制来自多个 FITS 文件的数据。我已经阅读了一些 Matplotlib 的文档和一些与此相关的问题,例如如何在 matplotlib 中获取多个子图?.

下面是从单个 FITS 文件中绘制数据的部分代码:

def plot_freq_range_db_above_background(self, start_freq, end_freq):
        plt.figure(1, figsize=(11, 6))
        plt.imshow(self.hdul_dataset['db'] - self.hdul_dataset['db_median'],
                   cmap='magma', norm=plt.Normalize(self.hdul_dataset['v_min'],
                                                    self.hdul_dataset['v_max']
                                                    ),
                   aspect='auto', extent=[self.hdul_dataset['time_axis'][0],
                                          self.hdul_dataset['time_axis']
                                          [-1000],
                                          self.hdul_dataset['frequency'][-1],
                                          self.hdul_dataset['frequency'][0]])
        plt.ylim(start_freq, end)
        plt.gca().invert_yaxis()
        plt.colorbar(label='dB above background')
        plt.xlabel('Time (UT)', fontsize=15)
        plt.ylabel('Frequency (MHz)', fontsize=15)
        plt.title(self.filename, fontsize=16)
        plt.tick_params(labelsize=14)
        plt.show()

这是由上述方法生成的绘图示例:
BLEN7M_20120812_140000_25

所以,我现在要做的是绘制来自不同文件的数据,并将它们全部在一个图中彼此相邻。每个图的 X 轴(频率)都相同,Y 轴(时间)从一个文件到下一个文件是连续的。

这是我写的试图完成我刚才描述的方法:

    def plot_fits_files_list(files_list, start_freq, end_freq):
        dim = len(files_list)
        plt_index = 1
        plt.figure(1)
        for file in files_list:
            fits_filename = file.split(os.sep)[-1]
            fitsfile = ECallistoFitsFile(fits_filename)
            fitsfile.set_file_path()
            fitsfile.set_hdul_dataset()
            plt.subplot(dim, dim, plt_index)
            plt_index += 1
            plt.imshow(
                fitsfile.hdul_dataset['db'] -
                fitsfile.hdul_dataset['db_median'],
                cmap='magma',
                norm=plt.Normalize(fitsfile.hdul_dataset['v_min'],
                                   fitsfile.hdul_dataset['v_max']),
                aspect='auto', extent=[fitsfile.hdul_dataset['time_axis'][0],
                                       fitsfile.hdul_dataset['time_axis']
                                       [-1000],
                                       fitsfile.hdul_dataset['frequency'][-1],
                                       fitsfile.hdul_dataset['frequency'][0]])
            plt.ylim(start_freq, end_freq)
            plt.gca().invert_yaxis()
        plt.colorbar(label='dB above background')
        plt.xlabel('Time (UT)', fontsize=15)
        plt.ylabel('Frequency (MHz)', fontsize=15)
        plt.title("Multiple Plots Test", fontsize=16)
        plt.tick_params(labelsize=14)
        plt.show()

这是它目前正在生成的情节: 扩展绘图.png

标签: pythonmatplotlibplotastropy

解决方案


推荐阅读