python
1import matplotlib.pyplot as plt
2%matplotlib inline
3import numpy as np
4
5def plot_feature_importances_cancer(cancer, model):
6 n_features = cancer.data.shape[1]
7 plt.barh(range(n_features), model.feature_importances_, align="center")
8 plt.yticks(np.arange(n_features), cancer.feature_names)
9 plt.xlabel("Feature importance")
10 plt.ylabel("Feature")
11
12def main():
13 names = [c for c in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ']
14 values = [(0.1, 0.3, 0.7, 0.2, 0.1, 0.6)[i % 6] for i in range(len(names))]
15 model = cancer = A(names, values)
16 plt.figure(figsize=(16, 10)) # (A)
17 plot_feature_importances_cancer(cancer, model)
18 # plt.figure(figsize=(16, 10)) # (B)
19 plt.show()
20
21class A:
22 def __init__(self, feature_names, importances):
23 self.data = np.zeros((1, len(importances)))
24 self.feature_names = feature_names
25 self.feature_importances_ = importances
26
27main()
こんな具合にしてみたのですが、指定した大きさになってくれるようです。
ひょっとしてグラフを描画する前(=A)でなく描画した後(=B)でplt.figure(...)
としたのではありませんか?この関数は「これから描画するグラフを載せるFigureオブジェクトを生成する機能」なのでそれを指定せずにグラフの描画を始めてしまうと「デフォルトの大きさで生成されたFigure上にグラフが描画される」結果となります。Notebookでは複数のFigureがあっても最初に生成したFigureしかinline表示されないようでしたので2つFigureが生成されていることに気づきにくいですね・・・
可能ならplt.xxxを使うのではなく各役割を持つオブジェクトへのメソッド呼び出しでコードを組み立てることに慣れておくとよいかも知れません。
Python
1import matplotlib.pyplot as plt
2
3
4fig = plt.figure()
5ax = fig.add_subplot(111)
6ax.plot(...)
7ax.set_xlim(...)
8ax.set_xticks(...)
9ax.set_xlabel(...)
このようにすればどのオブジェクトをどういう順番で生成すべきかなんてことが自然に意識できるように思えます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/10 12:10