テスト用のグラフの描画
まずは、グラフを用意します。棒グラフでも折れ線グラフでもいいです。
折れ線グラフを デモサイト を参考に描画します。
あと、matplotlib.axes.Axes.plot のドキュメント も参考にします。
import os
from datetime import datetime
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.plot(names, values, linewidth=2.5, marker='o')
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_a.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
このような折れ線グラフが出力されます。
ラベルに日本語を使う
ax.set_xticklabels() を使って、メモリのラベルを日本語にしてみます。
必要な場合は、matplotlib.axes のドキュメント も見てください。
import os
from datetime import datetime
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.plot(names, values, linewidth=2.5, marker='o')
print(ax.get_xticklabels())
ax.set_xticklabels(['りんご', 'オレンジ', 'レモン', 'ライム'])
print(ax.get_xticklabels())
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_b.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
日本語うんぬんの前に、ここのコードの実行時にワーニングが出ています。
print(ax.get_xticklabels())
ax.set_xticklabels(['りんご', 'オレンジ', 'レモン', 'ライム'])
print(ax.get_xticklabels())
ワーニングは UserWarning: FixedFormatter should only be used together with FixedLocator です。
この指摘は、最初の ax.get_xticklabels() の出力を見ると、ラベルを書く tick location がすべて0になっているからです。
[Text(0, 0, ), Text(0, 0, ), Text(0, 0, ), Text(0, 0, )]
UserWarning: FixedFormatter should only be used together with FixedLocator
ax.set_xticklabels(['りんご', 'オレンジ', 'レモン', 'ライム'])
[Text(0, 0, 'りんご'), Text(1, 0, 'オレンジ'), Text(2, 0, 'レモン'), Text(3, 0, 'ライム')]
このようにコードを修正します。
ax.set_xticks([0, 1, 2, 3]) で tick location を指定します。
import os
from datetime import datetime
import matplotlib.pyplot as plt
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.plot(names, values, linewidth=2.5, marker='o')
print(ax.get_xticklabels())
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(['りんご', 'オレンジ', 'レモン', 'ライム'])
print(ax.get_xticklabels())
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_c.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
ここで、日本語問題に出くわします。
missing from current font. という指摘がされ、出力されたグラフも文字が豆腐になっています。
この問題を解決するために、fontproperties パラメータを使います。
ax.set_xticklabels() のときに fontproperties で日本語を持つフォントを指定します。
コード例では、MPLUSRounded1c-Black.ttf を指定しています。
文字は Googleフォント などからダウンロードしてください。
import os
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.plot(names, values, linewidth=2.5, marker='o')
fp = FontProperties(fname='MPLUSRounded1c-Black.ttf')
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(
['りんご', 'オレンジ', 'レモン', 'ライム'],
fontproperties=fp,
fontsize=8,
)
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_d.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
このようなグラフが出力されます。
ラベルを回転させる
メモリラベルを回転させるのは、rotation パラメータです。
ha パラメータは、horizontalalignment のことです。
matplotlib.axes.Axes.set_xticklabels のドキュメント と
matplotlib.text.Text のドキュメント を見てください。
import os
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
ax.plot(names, values, linewidth=2.5, marker='o')
fp = FontProperties(fname='MPLUSRounded1c-Black.ttf')
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(
['りんご', 'オレンジ', 'レモン', 'ライム'],
fontproperties=fp,
fontsize=8,
rotation=45,
ha="center",
)
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_e.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
このようなグラフが出力され、下の方が切れています。
グラフの周りの余白を調整するのは、subplots_adjust() です。
plt.subplots_adjust(bottom=0.2) でグラフの下に余白を入れます。
matplotlib.pyplot.subplots_adjust のドキュメント を見てください。
import os
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
plt.subplots_adjust(bottom=0.2)
ax.plot(names, values, linewidth=2.5, marker='o')
fp = FontProperties(fname='MPLUSRounded1c-Black.ttf')
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(
['りんご', 'オレンジ', 'レモン', 'ライム'],
fontproperties=fp,
fontsize=8,
rotation=45,
ha="center",
)
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_f.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
このようになります。
X軸のタイトルを入れる
最後に、X軸のタイトルを付けます。
ax.set_xlabel()で付けることができます。
matplotlib.axes.Axes.set_xlabel のドキュメント を見てください。
import os
from datetime import datetime
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
data = {'apple': 10, 'orange': 15, 'lemon': 5, 'lime': 20}
names = list(data.keys())
values = list(data.values())
fig, ax = plt.subplots(1, 1, figsize=(3.2, 2.4))
plt.subplots_adjust(bottom=0.3)
ax.plot(names, values, linewidth=2.5, marker='o')
fp = FontProperties(fname='MPLUSRounded1c-Black.ttf')
ax.set_xticks([0, 1, 2, 3])
ax.set_xticklabels(
['りんご', 'オレンジ', 'レモン', 'ライム'],
fontproperties=fp,
fontsize=8,
rotation=45,
ha="center",
)
ax.set_xlabel('商品', fontproperties=fp)
filename = 'graph_plot_' + datetime.today().strftime('%Y%m%d') + '_g.png'
file_path = os.path.join(os.getcwd(), filename)
plt.savefig(file_path)
このようになりました。