パンダプロットすべての日付値をx軸に表示します(matplolibは少数の値のみを表示します)MMM-YYYYとしてフォーマットされます[重複]

Dec 17 2020
import os
import pandas as pd
import matplotlib.pyplot as plt
import datetime

df = pd.read_excel(DATA_DIR+"/"+file_list[0], index_col="Date")
df.head(5)

smooth = df['Pur. Rate'].rolling(window=20).mean()
smooth.plot()

次のグラフが表示され、毎月のすべての日付値をx軸にプロットする必要があります。x軸に斜めにフォーマットされたすべての月と年をフォーマット(Feb-19)で表示したい。プロットをjpgとして保存するので、プロットのサイズを大きくしてすべてに合わせることができます。

x軸に次の値を設定します:1月16日、2月16日、3月16日、4月16日、5月16日、6月16日、7月16日、8月16日、9月16日、10月16日、11月16日、12月16日、1月17日、2月17日…(これらすべての値を表示したいのですが、matplotlibはこれを自動的に切り捨てます、それを避けたいのです)

回答

1 Mr.T Dec 17 2020 at 22:48

コメントで述べたように、ロケーターとフォーマッターの両方を設定する必要があります。これはのためのmatplotlibのドキュメントで十分に説明されている一般のグラフと日時軸の別々。TickLocatorsの説明も参照してください。フォーマットコードは、Pythonのstrftime()およびstrptime()フォーマットコードから派生しています。

from matplotlib import pyplot as plt
import pandas as pd
from matplotlib.dates import MonthLocator, DateFormatter


#fake data
import numpy as np
np.random.seed(123)
n = 100
df = pd.DataFrame({"Dates": pd.date_range("20180101", periods=n, freq="10d"), "A": np.random.randint(0, 100, size=n), "B": np.random.randint(0, 100, size=n),})
df.set_index("Dates", inplace=True)
print(df)

ax = df.plot()

#defines the tick location 
ax.xaxis.set_major_locator(MonthLocator())
#defines the label format
ax.xaxis.set_major_formatter(DateFormatter("%b-%y"))
ax.tick_params(axis="x", labelrotation= 90)

plt.tight_layout()
plt.show()

サンプル出力:

Boul Dec 17 2020 at 20:47

pandas関数だけで、stftime()を使用して、日付スキーマインデックス '%Y-%m-%d'を新しい形式 '%b-%Y'およびplot内のいくつかのパラメーターに置き換えることができます。

smoothdf.plot(xticks=smoothdf.index.strftime('%m-%Y').unique()).set_xticklabels(smoothdf.index.strftime('%b-%Y').unique())

絶対に見たいラベルを指定するxticks

set_xticklabelsを使用して、ラベルのリストを変更します。

LucaAngioloni Dec 17 2020 at 20:14

pandas plotではなくmatplotlibを使用し、次のようにして、指定した形式で日付をプロットすることをお勧めします。

import matplotlib.dates as mdates

from pandas.plotting import register_matplotlib_converters
register_matplotlib_converters()

myFmt = mdates.DateFormatter('%b-%Y') # date formatter for matplotlib
                                      # %b is Month abbreviated name, %Y is the Year

# ... after some code

fig, ax = plt.subplots(figsize=(15,8))

ax.xaxis.set_major_formatter(myFmt)
fig.autofmt_xdate()

# Plot data ...

ax.set_xticks("""... define how often to show the date""")

次のようなものを使用して、データフレームからデータを取得できます。.to_numpy()または.values()

機能については、このドキュメントを参照してくださいset_xticks