2

等高線の symlog (対称対数) スケールを使用して等高線図を作成するにはどうすればよいですか。つまり、負の値と正の値の両方を示す対数スケールです。

1つの可能性は、この例から離れて作業することです:

http://matplotlib.org/examples/pylab_examples/contourf_log.html

これにより、対数スケールのレシピが得られます。

from matplotlib import pyplot, ticker
cs = pyplot.contourf(X, Y, z, locator=ticker.LogLocator())

ただし、これは負の値を許可しません。解決策になる可能性のある がありticker.SymmetricalLogLocator()ますが、ドキュメントはあまりないようです。

編集:

明確にするために(対数スケールで負の値を要求するのは無意味に聞こえる可能性があるため)、必要なのはmatplotlib軸で提供される「symlog」スケールと同じです。以下のプロット (別のスタック交換投稿から取得) は、x 軸に symlog を示しています。これは「対数」スケールですが、見る人にわかりやすいように負の値を処理します。

symlog の例

私は同じ種類のスケーリングが必要ですが、contourまたはcontourfのカラースケール用です。

4

1 に答える 1

0

私は同じことをしようとしているこのスレッドに出くわしました。つまり、正と負の両方の方向に大きな範囲の値をプロットしています。さらに、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])

ここに画像の説明を入力

于 2016-08-02T17:19:59.113 に答える