在 matplotlib 中使用 SymLogNorm 在颜色条上进行等距刻度
Equidistant ticks on colorbar using SymLogNorm in matplotlib
我想使用 SymLogNorm()
强制我的颜色条的刻度在颜色条上(而不是在它们的值中)等间距,就像它们在 LogNorm()
的默认模式下一样.如果不手动操作,我怎么能做到这一点,即不执行以下操作:
plt.colorbar(ticks=[vmin, value1, ... , vmax])
我想要的基本上是与使用 LogNorm()
(幅度)时相同的刻度。以下是我的代码的基本工作原理:
import ...
...
y = np.loadtxt('my_data.dat')
vmin_a = y[0]
vmax_a = y[1]
norm_a = SymLogNorm(linthresh=0.5, linscale=0.03, vmin=vmin_a, vmax=vmax_a)
plt.figure(1)
plt.scatter(x[0], x[1], marker='.', s=7, linewidths=0, c=x[3], cmap= \
plt.get_cmap('RdBu_r'), norm=norm_rs)
plt.xlabel(xax)
plt.ylabel(yax)
plt.colorbar()
pl.xlim([vmin_a, vmax_a])
pl.ylim([vmin_a, vmax_a])
plt.show()
我认为下图很好地解释了我不想要它的原因,即它的实际外观:
我感谢任何提示。
问候
据我所知,必须使用 SymLogNorm 手动设置刻度。我通过定义解决了我的问题:
tick_locations_plot=( [vmin]
+ [-(10.0**x) for x in range(minlog-1,-logthresh-1,-1)]
+ [0.0]
+ [(10.0**x) for x in range(-logthresh,maxlog-1)]
+ [vmax] )
哪里
maxlog=int(np.ceil( np.log10(vmax) ))
minlog=int(np.ceil( np.log10(-vmin) ))
然后使用
plt.colorbar(ticks=tick_locations)
符合我的要求。
我想使用 SymLogNorm()
强制我的颜色条的刻度在颜色条上(而不是在它们的值中)等间距,就像它们在 LogNorm()
的默认模式下一样.如果不手动操作,我怎么能做到这一点,即不执行以下操作:
plt.colorbar(ticks=[vmin, value1, ... , vmax])
我想要的基本上是与使用 LogNorm()
(幅度)时相同的刻度。以下是我的代码的基本工作原理:
import ...
...
y = np.loadtxt('my_data.dat')
vmin_a = y[0]
vmax_a = y[1]
norm_a = SymLogNorm(linthresh=0.5, linscale=0.03, vmin=vmin_a, vmax=vmax_a)
plt.figure(1)
plt.scatter(x[0], x[1], marker='.', s=7, linewidths=0, c=x[3], cmap= \
plt.get_cmap('RdBu_r'), norm=norm_rs)
plt.xlabel(xax)
plt.ylabel(yax)
plt.colorbar()
pl.xlim([vmin_a, vmax_a])
pl.ylim([vmin_a, vmax_a])
plt.show()
我认为下图很好地解释了我不想要它的原因,即它的实际外观:
据我所知,必须使用 SymLogNorm 手动设置刻度。我通过定义解决了我的问题:
tick_locations_plot=( [vmin]
+ [-(10.0**x) for x in range(minlog-1,-logthresh-1,-1)]
+ [0.0]
+ [(10.0**x) for x in range(-logthresh,maxlog-1)]
+ [vmax] )
哪里
maxlog=int(np.ceil( np.log10(vmax) ))
minlog=int(np.ceil( np.log10(-vmin) ))
然后使用
plt.colorbar(ticks=tick_locations)
符合我的要求。