Python初心者、グラフ作成にチャレンジしてみました。
ブログの検索順位取得ツールをPythonで作ろうとしています。
今までは、Google検索し順位を取ってきてExcelに書き出す部分の作成をしてきました。
今回は、順位の変動をプロットする機能を作っていきます。
グラフってgnuplotかExcelで作ることがほとんどだった私。
うまくPythonでグラフ作成できるでしょうか・・・
Matplotlibをインストール
Pythonでグラフを作成するには、「Matplotlib」というモジュールが必要なので、いつものようにpipでインストールしました。
Matplotlibは今までと違ってブワッと何行も状況が表示されましたが、普通にインストール成功しました。


とりあえずグラフを作ってみる
まずは基本的なグラフを作ってみたいと思います。
x軸が日付、y軸がブログ順位の折れ線グラフで、データはソースで設定しちゃいます。
グラフを描画するソースコード
まず、こちらのコードを書いてグラフを表示させてみました。
x軸のフォーマット以外は全てデフォルトのグラフとなります。
1 2 3 4 5 6 7 8 9 10 11 12 |
import matplotlib.pyplot as plt import matplotlib.dates as mdates import datetime x = [datetime.datetime(2019,6,27) + datetime.timedelta(days=i) for i in range(5)] y = [4,5,8,7,5] plt.plot(x,y) #x軸フォーマット設定 plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) plt.show() |
Matplotlibのdatesは、x軸に日付を使いたいのでインポートしました。
x軸のデータはdatetime関数で2019/6/27から5日間としました。
y軸は適当な数値で、ブログ検索順位を模擬しています。
グラフの作成は
1 2 |
plt.plot(x,y) plt.show() |
でできます。
今回はx軸が日付なので、フォーマットを指定してあげます。
1 |
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) |
「set_major_formatter」が主目盛り(大目盛り)の設定になります。
できたグラフ
上記のコードで表示してみたグラフは、こうなりました。

なるほど。
とりあえずグラフは作れました。
x軸の目盛り間隔が嫌ですね~
グリッド線も欲しいところ。
改善したい箇所がいくつかあります。
好みのグラフになるように、軸や目盛りをカスタマイズしてみます。
軸や目盛りの設定をしてみる
デフォルトで作られたグラフでは見栄えが良くないので、軸や目盛りをカスタマイズしていきます。
軸や目盛りをカスタマイズ
プロットするデータは同じです。
見栄えを改良したコードがこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import matplotlib.pyplot as plt import matplotlib.dates as mdates import matplotlib.ticker as ticker import datetime #プロットするデータを設定 x = [datetime.datetime(2019,6,27) + datetime.timedelta(days=i) for i in range(5)] y = [4,5,8,7,5] plt.plot(x,y) #get current axes ax = plt.gca() #x軸フォーマット設定 ax.xaxis.set_major_formatter(mdates.DateFormatter('%m/%d')) #x軸の間隔を日に ax.xaxis.set_major_locator(mdates.DayLocator()) #y軸の間隔を1に ax.yaxis.set_major_locator(ticker.MultipleLocator(1)) #目盛りを内側に ax.tick_params(direction = 'in') #y軸の範囲 plt.ylim(ymin=0) #ymaxは変えずに、yminだけ変更 #軸ラベル plt.xlabel('day') plt.ylabel('rank') #grid追加(点線に設定) plt.grid(linestyle= '--') plt.show() |
追加箇所は以下です。
目盛り間隔
軸の目盛り間隔が、デフォルトだと分かりずらいですね。
x軸は同じ日付が2個ずつですし、y軸も0.5ずつである必要はないので、目盛り間隔を変えてみます。
1 2 3 4 5 6 7 |
#get current axes ax = plt.gca() #x軸の間隔を日に ax.xaxis.set_major_locator(mdates.DayLocator()) #y軸の間隔を1に ax.yaxis.set_major_locator(ticker.MultipleLocator(1)) |
このコードで間隔を設定できます。
まず、「plt.gca()」でグラフの指定をしておきます。
きちんと理解できていないのですが、一度に複数のグラフを作成する場合もあるため、
この操作はグラフを指定するために行われているっぽいです。
(間違った理解ならすみません)
軸目盛の設定(ここでは主目盛りの設定)は「set_major_locator」で行います。
引数にただの数値(1だけ)を入れればいいのではなく、「ticker.MultipleLocator(1)」としないといけないのがポイント。
目盛り線の方向
デフォルトでは目盛り線が枠の外側に出ていますが、私は内側に向いている方が好きなので、変更してみます。
1 |
ax.tick_params(direction = 'in') |
これで内側に向いた目盛りになります。
ちなみに、外側に指定するなら「out」、内側と外側両方に出た目盛り線を指定するなら「inout」となります。
y軸の範囲
y軸の最小値が4なのが個人的に嫌なので、最小値のみ設定してみます。
y軸の最小値を0にするのは
1 |
plt.ylim(ymin=0) |
ちなみに、最小値と最大値の両方を設定するのは
1 |
plt.ylim(0,10) |
とすればOK。(例は最小が0、最大が10となるようなコード)
軸ラベル
軸ラベルが書かれていないと、何のデータなのか分からないですよね。
昔から(大学でも仕事でも)軸ラベルは必ず入れるようにしています。
軸ラベルの設定方法は
1 2 |
plt.xlabel('x軸のラベル') plt.ylabel('y軸のラベル') |
日本語を表示するにはフォントの設定が必要だそうで、面倒なので英語にしました。
グリッド線
グリッド線(目盛り線)を追加します。
デフォルトのグリッド線(灰色の線)でよければ
1 |
plt.grid() |
でOK。
今回は点線にしたいので、線のスタイルを指定しました。
線スタイル指定は、グリッドの引数に「linestyle=」で設定します。
スタイルの指定方法はこちらが参考になりました。
参考:matplotlibによる線種や色などの指定方法
1 |
plt.grid(linestyle= '--') |
できたグラフ
カスタマイズを施したグラフはこのようになりました。

うん、見栄えが良くなりました。
初めてPythonでグラフを作ったので、今回はこの辺でよしとします。
ブログ検索順位取得ツールの機能(検索、Excel書き出し、グラフ作成)はほぼできたので、次はいよいよGUI操作画面の作成に入ります。
PythonでGUI・・・大変なのかどうかも分からない未知の世界
レッツ・ラ・チャレンジ!
んじゃ、また~
コメント