matplotlib描画を使ったPythonの詳しい解説

高洛峰
リリース: 2016-10-18 14:12:52
オリジナル
2279 人が閲覧しました

Matplotlib は、Python で最も有名な描画ライブラリであり、対話型描画に非常に適した matlab に似た一連のコマンド API を提供します。また、描画コントロールとして簡単に使用したり、GUI アプリケーションに埋め込んだりすることもできます。ドキュメントは非常に充実しており、ギャラリー ページには何百ものサムネイルがあり、それらを開くとすべてソース プログラムが含まれています。したがって、特定の種類の図を描画する必要がある場合は、このページを参照/コピー/ペーストするだけで基本的に作業は完了します。

この記事では、matplotlib を使用して、最も単純なバーから複雑なバーまでを段階的に構築します。最も単純なバーは何ですか? 次のステートメントを見れば、それがどれほど単純であるかがわかります:

import matplotlib.pyplot as plt 
  
plt.bar(left = 0,height = 1)
plt.show()
ログイン後にコピー

実行効果:

matplotlib描画を使ったPythonの詳しい解説

はい、これは私がこれまで見た中で最も単純な描画ステートメントです。まず matplotlib.pyplot をインポートし、次にその bar メソッドを直接呼び出し、最後に show を使用して画像を表示しました。 bar の 2 つのパラメーターについて説明します。

left: 列の左端の位置。1 を指定すると、現在の列の左端の x 値は 1.0 になります。

height: これは高さです。列の Y 軸

left と height の値です。別の値 (この場合は列) を使用することに加えて、タプル (この場合はそれを表します) で置き換えることもできます。複数の長方形)。たとえば、次の例では、

import matplotlib.pyplot as plt
  
plt.bar(left = (0,1),height = (1,0.5))
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

left = (0,1) は、合計 2 つの長方形があり、最初の長方形の左端が 0 で、2 番目の長方形の左端が 0 であることを意味することがわかります。 2番目は1です。高さパラメータは同じです。

もちろん、これら 2 つの長方形は「太すぎる」と思われるかもしれません。この時点で、バーの幅パラメータを指定することで幅を設定できます。

import matplotlib.pyplot as plt
  
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

このとき、x 軸と y 軸の説明を指定する必要があります。たとえば、X 軸は性別、Y 軸は人数です。実装も非常に簡単です。コードを見てください:

import matplotlib.pyplot as plt
  
plt.xlabel(u'性别')
plt.ylabel(u'人数')
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

matplotlib は Unicode のみをサポートしているため、ここでは中国語に u を使用する必要があることに注意してください (3.0 以降では使用されないようです。私は 2.7 を使用しています)。次に、X 軸上の各バーを示します。たとえば、1 番目は「男性」、2 番目は「女性」です。

import matplotlib.pyplot as plt
  
plt.xlabel(u'性别')
plt.ylabel(u'人数')
  
plt.xticks((0,1),(u'男',u'女'))
  
plt.bar(left = (0,1),height = (1,0.5),width = 0.35)
  
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

plt.xticks の使用法は、前に説明した left と height の使用法に似ています。複数のバーがある場合、それは複数の次元のタプルです。 1 つ目はテキストの場所、2 つ目は特定のテキストの説明です。しかし、ここには明らかに問題があります。指定した位置は多少「オフセット」されており、理想的な状態は各長方形の中央にあるはずです。 (0,1)=>( (0+0.35)/2, (1+0.35)/2) と変更することもできますが、これはさらに面倒です。 barメソッドでalign="center"を直接指定することでテキストを中央揃えにすることができます

import matplotlib.pyplot as plt
  
plt.xlabel(u'性别')
plt.ylabel(u'人数')
  
plt.xticks((0,1),(u'男',u'女'))
  
plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
  
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

次に、アイコンにタイトルを追加することもできます。

plt.title(u"性别比例分析")
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

もちろん、凡例も不可欠です:

import matplotlib.pyplot as plt
  
plt.xlabel(u'性别')
plt.ylabel(u'人数')
  
  
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
  
plt.legend((rect,),(u"图例",))
  
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

ここでの凡例メソッド、内部のパラメータはタプルである必要があることに注意してください。凡例が 1 つしかない場合でも、正しく表示されません。

次に、各長方形の特定の点 Y 値をマークすることもできます。ここでは、一般的なメソッドを使用する必要があります:

def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
ログイン後にコピー

plt.text のパラメータは、x 座標、y 座標、および表示されるテキストです。したがって、呼び出しコードは次のとおりです。

import matplotlib.pyplot as plt
  
def autolabel(rects):
    for rect in rects:
        height = rect.get_height()
        plt.text(rect.get_x()+rect.get_width()/2., 1.03*height, '%s' % float(height))
  
plt.xlabel(u'性别')
plt.ylabel(u'人数')
  
  
plt.title(u"性别比例分析")
plt.xticks((0,1),(u'男',u'女'))
rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center")
  
plt.legend((rect,),(u"图例",))
autolabel(rect)
  
plt.show()
ログイン後にコピー

matplotlib描画を使ったPythonの詳しい解説

この時点で、グラフィックは基本的に完成していますが、上部近くに長方形があり、あまり見栄えがよくないことがわかります。ある程度距離を置いて出た方が良いでしょう。この設定に特有のプロパティは見つかりませんでした。ただし、ちょっとしたコツを使ってやりました。 bar 属性の yerr パラメータです。このパラメータが設定されると、対応する四角形に垂直線が表示されます。これが何を意味するのかはわかりません。ただし、この値を非常に小さい値に設定すると、上のスペースは自動的に空けられます。図に示すように:


rect = plt.bar(left = (0,1),height = (1,0.5),width = 0.35,align="center",yerr=0.000001)

matplotlib描画を使ったPythonの詳しい解説

左側と右側については、空白を残すことができるかどうかわかりません(xerrパラメータが機能しません)


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート