matplotlib で plt.show() するとウィンドウは開いてもグラフが描画されない

matplotlib で plt.show() するとウィンドウは開いてもグラフが描画されない、という問題が発生しました。
plt.show() で ウィンドウが開かない、というはよくあるパターンで大体が描画の際のバックエンドの指定だと思います (https://qiita.com/yoshizaki_kkgk/items/bcb45e3bc936ec49ef00)。 今回は、それとは異なった現象・原因であったため残しておきます。

結論

どうやら tk のバージョンに起因するようです。

tk 8.6.8 and tk 8.6.9 build 0 and build 1000 are fine.
tk 8.6.9 build 1001 and build 1002 are not.
macOS 10.14.5 (18F132)

github.com

github.com

対処

私は anaconda を使っており、tk のダウングレードなどで他のパッケージへの影響がわからなかったため、新たに conda 環境を作り直しました。
こういう場合は anaconda は本当に楽だなと思います。

$ conda create -n py36_base python=3.6
$ conda info -e
# conda environments:
#
base                  *  /anaconda3
py36_base                /anaconda3/envs/py36_base

$ source activate py36_base

$ conda install ipython ipdb
$ conda install pandas matplotlib seaborn
$ conda install scikit-learn

$ conda list | grep tk
tk                        8.6.8                ha441bb4_0

# 動作確認
# 以下のサンプルを実行できることを確認します。
# sklearn + matplotlib https://scikit-learn.org/stable/auto_examples/plot_multilabel.html#sphx-glr-auto-examples-plot-multilabel-py

デフォルトでは tk=8.6.8 であったことから、どうやら他のパッケージをアップグレードした拍子に tk も 8.6.9 に上げてしまったようでした。