Pythonで多次元のリストから2次元ヒストグラムを作りたい
Q&A
Pythonで、多次元のリストからある2つの次元を指定(他の次元を固定)して、2次元ヒストグラム(離散的なヒートマップ)を作りたいです。
例えば次のような3次元のリストがあるとします。
test = [
[
[10, 11, 12, 13, 14],
[11, 12, 13, 14, 15],
[12, 13, 14, 15, 16],
[13, 14, 15, 16, 17]
],
[
[17, 16, 15, 14, 13],
[16, 15, 14, 13, 12],
[15, 14, 13, 12, 11],
[14, 13, 12, 11, 10]
],
[
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14]
]
]
test[0][:][:]
, test[1][:][:]
, test[2][:][:]
をヒストグラムとして可視化すると順に次のようになります。
これらを出力したPythonのコードは以下の通りです。
test.py
import seaborn as sns
import matplotlib.pyplot as plt
test = [
[
[10, 11, 12, 13, 14],
[11, 12, 13, 14, 15],
[12, 13, 14, 15, 16],
[13, 14, 15, 16, 17]
],
[
[17, 16, 15, 14, 13],
[16, 15, 14, 13, 12],
[15, 14, 13, 12, 11],
[14, 13, 12, 11, 10]
],
[
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14],
[10, 11, 12, 13, 14]
]
]
plt.figure()
sns.heatmap(test[0][:][:], cmap='Blues', square=True, annot=True)
plt.savefig('./test_0.png')
plt.show()
plt.close('all')
質問
ここで3つの行列のうち、例えばそれぞれの一番上の行を取り出したもののヒストグラムを作りたいです。つまりイメージとしては
[
[10, 11, 12, 13, 14],
[17, 16, 15, 14, 13],
[10, 11, 12, 13, 14]
]
をそのまま可視化したようなヒストグラムを作りたいです。これをやろうとソースコードのtest[0][:][:]
をtest[:][0][:]
に変えてみたのですが、ヒストグラムはtest[0][:][:]
と同じものでした。同様にtest[:][1][:]
はtest[1][:][:]
と同じヒストグラム、test[:][2][:]
はtest[2][:][:]
と同じヒストグラムとなってしまいます。
どうしたらtest[:][0][:]
とかtest[:][:][0]
のヒストグラムを作れるでしょうか? よろしくお願いします。
0