1. ホーム
  2. python

[解決済み] matplotlib で 2 番目の x 軸を追加する方法

2023-03-21 17:20:10

質問

とても簡単な質問です。私はプロット上に2番目のX軸を持つ必要があり、この軸は最初の軸の特定の位置に対応する特定の数のティックを持つようにしたいです。

例でやってみましょう。ここでは、ダークマターの質量を、0から1までの範囲で1/(1+z)として定義される膨張係数の関数としてプロットしています。

semilogy(1/(1+z),mass_acc_massive,'-',label='DM')
xlim(0,1)
ylim(1e8,5e12)

プロットの上部にもう一つX軸を持ち、膨張係数のいくつかの値に対応するzを表示したいと思います。それは可能ですか?もし可能であれば、どのようにすればX軸を持つことができますか?

どのように解決するのですか?

Dharaさんの回答のコメントを参考にさせていただくと、リストを設定したいようですね。 new_tick_locations のリストを、古い x 軸から新しい x 軸への関数によって設定したいようです。その場合 tick_function は、点のnumpy配列を受け取り、それらを新しい値にマップし、それらをフォーマットします。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

X = np.linspace(0,1,1000)
Y = np.cos(X*20)

ax1.plot(X,Y)
ax1.set_xlabel(r"Original x-axis: $X$")

new_tick_locations = np.array([.2, .5, .9])

def tick_function(X):
    V = 1/(1+X)
    return ["%.3f" % z for z in V]

ax2.set_xlim(ax1.get_xlim())
ax2.set_xticks(new_tick_locations)
ax2.set_xticklabels(tick_function(new_tick_locations))
ax2.set_xlabel(r"Modified x-axis: $1/(1+X)$")
plt.show()

<イグ