私は地震学データをプロットし、異なる深度スライスの16のサブプロットを特徴とする図を作成しています。各サブプロットは震源の緯度/経度を表示し、色はその大きさにスケーリングされます。私は2つのことをしようとしています:
選択した領域のxとyの最小値と最大値に等しくなるように、すべてのプロットのスケールを調整します。これにより、プロット間で簡単に比較できます。 (したがって、すべてのプロットはxminからxmaxなどの範囲になります)
マグニチュードの色を調整して、スケールも表すようにします(つまり、色は、その特定のサブプロット上の点だけでなく、すべての利用可能な点を表します)。
これがいくつかの方法で達成されたことを確認しましたが、コードのループにそれらを適用するのに苦労しています。私が使用しているデータはここにあります: Data 。
コードを投稿し、現在の出力は以下のようになります。
import matplotlib.pyplot as plt
import pandas as pd
eq_df = pd.read_csv(eq_csv)
eq_data = eq_df[['LON', 'LAT', 'DEPTH', 'MAG']]
nbound = max(eq_data.LAT)
sbound = min(eq_data.LAT)
ebound = max(eq_data.LON)
wbound = min(eq_data.LON)
xlimit = (wbound, ebound)
ylimit = (sbound, nbound)
magmin = min(eq_data.MAG)
magmax = max(eq_data.MAG)
for n in list(range(1,17)):
km = eq_data[(eq_data.DEPTH > n - 1) & (eq_data.DEPTH <= n)]
plt.subplot(4, 4, n)
plt.scatter(km["LON"], km['LAT'], s = 10, c = km['MAG'], vmin = magmin, vmax = magmax) #added vmin/vmax to scale my magnitude data
plt.ylim(sbound, nbound) # set y limits of plot
plt.xlim(wbound, ebound) # set x limits of plot
plt.tick_params(axis='both', which='major', labelsize= 6)
plt.subplots_adjust(hspace = 1)
plt.gca().set_title('Depth = ' + str(n - 1) +'km to ' + str(n) + 'km', size = 8) #set title of subplots
plt.suptitle('Magnitude of Events at Different Depth Slices, 1950 to Today')
plt.show()
ETA:問題を解決するための新しいコード
他の回答での このコメント への応答として、この使用例での_sharex=True
_および_sharey=True
_の使用のデモを次に示します。
_import matplotlib.pyplot as plt
import numpy as np
# Supply the limits since random data will be plotted
wbound = -0.1
ebound = 1.1
sbound = -0.1
nbound = 1.1
fig, axs = plt.subplots(nrows=4, ncols=4, figsize=(16,12), sharex=True, sharey=True)
plt.xlim(wbound, ebound)
plt.ylim(sbound, nbound)
for n, ax in enumerate(axs.flatten()):
ax.scatter(np.random.random(20), np.random.random(20),
c = np.random.random(20), marker = '.')
ticks = [n % 4 == 0, n > 12]
ax.tick_params(left=ticks[0], bottom=ticks[1])
ax.set_title('Depth = ' + str(n - 1) +'km to ' + str(n) + 'km', size = 12)
plt.suptitle('Magnitude of Events at Different Depth Slices, 1950 to Today', y = 0.95)
plt.subplots_adjust(wspace=0.05)
plt.show()
_
いくつかの説明:
subplots_adjust(wspace=0.05)
で減らしましたplt.suptitle
_はループ内に存在する必要はありません(存在していてはいけません)。ticks = [n % 4 == 0, n > 12]
_は、各軸のbool
sのペアを作成し、どの目盛りを描画するかを制御するために使用されます。ax.tick_params(left=ticks[0], bottom=ticks[1])
で各軸に対して制御されますplt.xlim()
およびplt.ylim()
は、ループの前にonceを呼び出すだけで済みます