使用AxesGrid的面板图的轴刻度和刻度标签不匹配

时间:2020-03-26 00:34:20

标签: python matplotlib

我正在尝试使用mpl_toolkits.axes_grid1绘制面板图。它具有三行两列,代码为:

import os
import yt
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.axes_grid1 import AxesGrid

fig=plt.figure()
grid= AxesGrid(fig, (0.075,0.075,0.85,0.85), nrows_ncols = (3,2), axes_pad = 0.5,
               label_mode="L",share_all = True, direction='row', cbar_location="right",
               cbar_mode="edge", cbar_size="5%", cbar_pad="0.0%", aspect=True)
loc='/share/Part1/guido/mc_evolution/bouchut/'
folder=['cond_0_amr/','cond_0_h/']
snap_bn='mc_evolution_hdf5_plt_cnt_'

snap_1=[25,50,96]
snap_2=[25,50,130]

snap_d={'0':snap_1,'1':snap_2}

property='density'
color_map='rainbow'
zmin=2.12e-22
zmax=1e-19
axis="z"
log_norm_vel=False
max_dens=np.zeros(len(snap_1))
min_dens=np.zeros(len(snap_1))

for i in range(len(folder)):
    for k,j in enumerate(snap_d[str(i)]):
        index=2*k+i
        ds=yt.load(loc+folder[i]+snap_bn+str(j).zfill(4))
        p=yt.SlicePlot(ds, axis,property,center='c')
        slc=ds.slice(axis,0.5)
        p_fdr=slc.to_frb((5,'pc'),1024)
        max_dens[k]=p_fdr['dens'].max()
        min_dens[k]=p_fdr['dens'].min()
        p.antialias = True
        p.set_log(property,True)#,linthresh=None)
        p.set_minorticks('all','on')
        p.set_cbar_minorticks('all','on')
        p.zoom(2.0)
        p.annotate_velocity(factor=25, normalize=log_norm_vel, 
                            plot_args={"color":'g', 'headwidth':10, 'headlength':8})
        p.annotate_timestamp(corner='upper_left', draw_inset_box=False, 
                             text_args={'fontsize':'x-small','color':'w'})
        plot = p.plots['density']
        plot.figure = fig
        plot.axes = grid[index].axes
        plot.cax = grid.cbar_axes[index]
        plot.cax.minorticks_on()
        p._setup_plots()

plt.savefig('panel_collapse_evol_3v2_2_sims_each_'+color_map+'.png')

我得到的数字如下:

enter image description here

问题出在右下图的x轴上,它没有显示相同的轴刻度标签,它只显示-2、0和2,而不是-2,-1,0、1,2像左下角的情节我不知道是什么原因造成的。你能帮我吗?

1 个答案:

答案 0 :(得分:0)

我猜色条太接近会干扰自动刻度标签的选择。您可以手动标记它们,但是由于所有子图的颜色条均相同,因此更好的方法是仅绘制一个较大的单独颜色条。这是如何执行此操作的示例:Matplotlib Gallery

顺便说一句,rainbow不是映射连续变量的好选择,因为它不是顺序的颜色表。最好使用默认的viridis。此处讨论:Choosing Colormaps

相关问题