私は同じことをしようとしているこのスレッドに出くわしました。つまり、正と負の両方の方向に大きな範囲の値をプロットしています。さらに、imshow のように細かい粒度にしたかったのです。
「ticker.MaxNLocator(nbins)」を使用すると、nbins を高く設定して細かい粒度にすることができます。たとえば、nbins を 100 に設定できます。
また、少し前に StackOverflow で解決策を見つけた、素敵な Latex スタイルのティッカー フォーマットが必要でした。
このコード スニペットを一部のクラスの 1 つからここに投稿して、必要な人がどのように機能するかについての基本的なアイデアを得ることができるようにします。このソリューションを使用して、下の画像に示すように複数のプロットを生成します。
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
# function for nice Latex style tick formatting
# copied from
# http://stackoverflow.com/questions/25983218/
# scientific-notation-colorbar-in-matplotlib
# output formating for colorbar in 2D plots
def fmt(x, pos):
a, b = '{:.2e}'.format(x).split('e')
b = int(b)
return r'${} \times 10^{{{}}}$'.format(a, b)
# A confourf function I use inside one of my classes
# mainly interesting are the "plot" and "cbar" lines
def Make2DSubPlot(self, posIdent, timeIdx,typeIdx):
plt.subplot(posIdent)
y = self.radPos
x = self.axPos
z = self.fieldList[timeIdx][typeIdx]
plot = plt.contourf(x, y, z, locator=ticker.MaxNLocator(100), \
aspect='auto',origin='lower')
cbar = plt.colorbar(plot, orientation='vertical', \
format=ticker.FuncFormatter(fmt))
cbar.ax.set_ylabel(self.labelList[typeIdx])
plt.xlabel(self.labelList[self.iax])
plt.ylabel(self.labelList[self.iax])