実現したいこと
https://mori-memo.hateblo.jp/entry/2022/02/23/003111
と同様のことがやりたいです。
発生している問題・エラーメッセージ
上記サイトと同じコードで実行しましたが、うまくいきません。コードの実行はできるのですが、左のヒートマップを押しても散布図が表示されません。
該当のソースコード
python
1import numpy as np 2import pandas as pd 3import matplotlib.pyplot as plt 4import seaborn as sns 5from sklearn.datasets import load_boston 6 7 8cols = dd.columns 9rows = cols 10corr = dd.corr() 11 12def onclick(event): 13 x = event.xdata 14 y = event.ydata 15 axes = event.inaxes 16 # axis外クリック時は無視 17 if x == None or y == None: 18 return 19 # ヒートマップ以外をクリック時は無視 20 if axes != ax[0]: 21 return 22 23 # x、yの小数点切り捨ての値がインデックス番号と一致する 24 col = cols[int(x)] 25 row = rows[int(y)] 26 27 # 散布図の範囲指定用に描くデータの最大値-最小値を計算しておく 28 xwid = dd[col].max() - dd[col].min() 29 ywid = dd[row].max() - dd[row].min() 30 31 # 右の散布図の更新 32 ax[1].set_title('Correlation coefficient ' + col + ' - ' + row + ': ' \ 33 + str(round(corr.loc[row, col], 3))) 34 ax[1].set_xlabel(col) 35 ax[1].set_ylabel(row) 36 ln.set_data(dd[col], dd[row]) 37 # 散布図の範囲はmax,min値より少し大きめにする 38 ax[1].set_xlim(dd[col].min() - xwid * 0.1, dd[col].max() + xwid * 0.1) 39 ax[1].set_ylim(dd[row].min() - ywid * 0.1, dd[row].max() + ywid * 0.1) 40 plt.draw() 41 42fig, ax = plt.subplots(1, 2, figsize=(24, 15)) 43sns.heatmap(corr, ax=ax[0], vmin=-1, vmax=1, annot=True, fmt="3.2f", annot_kws={"size": 5}) 44ln, = ax[1].plot([np.nan], [np.nan], 'o') # 散布図プロット 45ax[0].set_aspect('equal') 46fig.canvas.mpl_connect('button_press_event', onclick) 47plt.show()
#実行結果
提示コードはNameErrorで実行できませんでした。
現象が再現するコードを提示ください。
ちなみに参考サイトのコードはこちらでは正常に動作しました。
サイトのコードと同じものを実行しました。図は出てくるのですが、ヒートマップをクリックしても散布図が表示されない状況です。
実行環境は何でしょうか? jupyter だったりしますか?
anacondaからJupyterを使ってます。python3.9です。
> anacondaからJupyterを使ってます。
もし
%matplotlib inline
を実行してたら、あるいは「%matplotlib ...」をどれも実行してなければ、下記のどちらかをコードの先頭で実行してみてください
%matplotlib notebook
%matplotlib tk
Vscodeで実行してますが、%matplotlib notebookを先頭にいれました。ただ、同様に動きませんでした。
%matplotlib tk
ではどうですか?
別のウインドウが開いて、そこにグラフが表示されるはずですが
(vs codeは使ってないのでよく知りませんが、直接jupyterを使った場合はそうなります)
%matplotlib tkでは、黄色の下線が引かれて、実行後Warning: Cannot change to a different GUI toolkit: tk. Using notebook instead. と表示します
回答1件
あなたの回答
tips
プレビュー