[解決済み] MatplotlibでPyPlotに凡例を追加する最も簡単な方法
2022-03-26 11:24:01
質問
<ブロッククオート
TL;DR ->
で折れ線グラフの凡例を作成するにはどうしたらよいでしょうか。
Matplotlib
's
PyPlot
余分な変数を作らずに?
以下のグラフスクリプトをご検討ください。
if __name__ == '__main__':
PyPlot.plot(total_lengths, sort_times_bubble, 'b-',
total_lengths, sort_times_ins, 'r-',
total_lengths, sort_times_merge_r, 'g+',
total_lengths, sort_times_merge_i, 'p-', )
PyPlot.title("Combined Statistics")
PyPlot.xlabel("Length of list (number)")
PyPlot.ylabel("Time taken (seconds)")
PyPlot.show()
ご覧の通り、これは非常に基本的な使用方法です。
matplotlib
's
PyPlot
. この場合、理想的には以下のようなグラフが生成されます。
何も特別なことはありませんね。しかし、どのデータがどこにプロットされているのかが不明です(私はいくつかのソートアルゴリズムのデータを、かかった時間に対する長さでプロットしようとしているのですが、どの線がどの線なのかがわかるようにしたいのです)。したがって、凡例が必要なのですが、以下の例を見てみると、( 公式サイトより ):
ax = subplot(1,1,1)
p1, = ax.plot([1,2,3], label="line 1")
p2, = ax.plot([3,2,1], label="line 2")
p3, = ax.plot([2,3,1], label="line 3")
handles, labels = ax.get_legend_handles_labels()
# reverse the order
ax.legend(handles[::-1], labels[::-1])
# or sort them by labels
import operator
hl = sorted(zip(handles, labels),
key=operator.itemgetter(1))
handles2, labels2 = zip(*hl)
ax.legend(handles2, labels2)
追加の変数を作成する必要があることがわかります。
ax
. グラフに凡例を追加するには
なし
余計な変数を作成することなく、現在のスクリプトのシンプルさを維持することができるのでしょうか?
解決方法は?
を追加します。
label=
をそれぞれの
plot()
を呼び出して、その後に
legend(loc='upper left')
.
このサンプルを考えてみましょう(Python 3.8.0でテスト済み)。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 20, 1000)
y1 = np.sin(x)
y2 = np.cos(x)
plt.plot(x, y1, "-b", label="sine")
plt.plot(x, y2, "-r", label="cosine")
plt.legend(loc="upper left")
plt.ylim(-1.5, 2.0)
plt.show()
このチュートリアルを少し修正したものです。 http://jakevdp.github.io/mpl_tutorial/tutorial_pages/tut1.html
関連
-
Pythonの学習とデータマイニングのために知っておくべきターミナルコマンドのトップ10
-
[解決済み】RuntimeWarning: 割り算で無効な値が発生しました。
-
[解決済み] Matplotlib (pyplot) の savefig が空白の画像を出力する
-
[解決済み] Matplotlibで、fig.add_subplot(111)の引数はどういう意味ですか?
-
[解決済み] Matplotlib で凡例をプロットの外側に配置する方法
-
[解決済み] matplotlib で x 軸または y 軸の "目盛り頻度" を変更する
-
[解決済み] なぜ多くの例では Matplotlib/pyplot/python で `fig, ax = plt.subplots()` が使われているのでしょうか?
-
[解決済み】Matplotlibで図のタイトルと軸ラベルのフォントサイズを設定するには?
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み】matplotlibのレジェンドマーカーが一度だけ表示される。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
opencvとpillowを用いた顔認証システム(デモあり)
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み】お使いのCPUは、このTensorFlowバイナリが使用するようにコンパイルされていない命令をサポートしています。AVX AVX2
-
[解決済み] データ型が理解できない
-
[解決済み】 AttributeError: モジュール 'matplotlib' には属性 'plot' がない。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】Python: SyntaxError: キーワードは式になり得ない