複数のバーをグループ化してプロットする方法 質問する

複数のバーをグループ化してプロットする方法 質問する

matplotlib で複数のバーをプロットする方法ですが、bar 関数を複数回呼び出そうとすると、バーが重なり合ってしまい、下の図のように最高値の赤だけが表示されます。x 軸に日付を含む複数のバーをプロットするにはどうすればよいでしょうか。

これまでのところ、私はこれを試しました:

import matplotlib.pyplot as plt
import datetime

x = [
    datetime.datetime(2011, 1, 4, 0, 0),
    datetime.datetime(2011, 1, 5, 0, 0),
    datetime.datetime(2011, 1, 6, 0, 0)
]
y = [4, 9, 2]
z = [1, 2, 3]
k = [11, 12, 13]

ax = plt.subplot(111)
ax.bar(x, y, width=0.5, color='b', align='center')
ax.bar(x, z, width=0.5, color='g', align='center')
ax.bar(x, k, width=0.5, color='r', align='center')
ax.xaxis_date()

plt.show()

私はこれを得た:

ここに画像の説明を入力してください

結果は次のようになりますが、日付は x 軸上に表示され、バーは隣り合っています。

ここに画像の説明を入力してください

ベストアンサー1

import matplotlib.pyplot as plt
from matplotlib.dates import date2num
import datetime

x = [
    datetime.datetime(2011, 1, 4, 0, 0),
    datetime.datetime(2011, 1, 5, 0, 0),
    datetime.datetime(2011, 1, 6, 0, 0)
]
x = date2num(x)

y = [4, 9, 2]
z = [1, 2, 3]
k = [11, 12, 13]

ax = plt.subplot(111)
ax.bar(x-0.2, y, width=0.2, color='b', align='center')
ax.bar(x, z, width=0.2, color='g', align='center')
ax.bar(x+0.2, k, width=0.2, color='r', align='center')
ax.xaxis_date()

plt.show()

ここに画像の説明を入力してください

「y 値も重複しています」の意味がわかりません。次のコードで問題は解決しますか?

ax = plt.subplot(111)
w = 0.3
ax.bar(x-w, y, width=w, color='b', align='center')
ax.bar(x, z, width=w, color='g', align='center')
ax.bar(x+w, k, width=w, color='r', align='center')
ax.xaxis_date()
ax.autoscale(tight=True)

plt.show()

ここに画像の説明を入力してください

おすすめ記事