pandas / matplotlib:如何在绘图的 x 轴上显示所有年份?
pandas / matplotlib : How do I show all years on the x-axis of my plot?
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.markers as markers
from datetime import datetime as dt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2011-02-01', '2012-01-01', '2012-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
df_TotalDay
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
plt.xticks([x for x in df_TotalDay.index])
plt.show()
在上面的图中,我只想显示唯一的年份。在这里,它只是“2011”和“2012”而不是实际日期。
我试过了
plt.xticks([x for x in df_TotalDay.index.year.unique()])
但这没有用。
我知道上面的 DataFrame 看起来有点傻,但我的实际 DataFrame 非常大,当我绘制数据时,它看起来像这样:
在上图中,matplotlib 并不是每年都在 x 轴上列出。我想包括缺失的年份。
你们很亲近。您应该生成所有要显示的日期,然后添加到 xticks:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2013-02-01', '2016-01-01', '2018-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
plt.xticks(pd.date_range(df_TotalDay.index.min(), df_TotalDay.index.max(), freq='YS'))
plt.show()
要仅显示年份,您可以使用
import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
Z Li 答案的替代方法是使用 matplotlibs dates.YearLocator
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime as dt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2011-02-01', '2012-01-01', '2012-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
ax.set_xlabel('Year')
ax.minorticks_off()
ax.xaxis.set_major_locator(matplotlib.dates.YearLocator())
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%Y"))
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
import matplotlib.markers as markers
from datetime import datetime as dt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2011-02-01', '2012-01-01', '2012-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
df_TotalDay
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
plt.xticks([x for x in df_TotalDay.index])
plt.show()
在上面的图中,我只想显示唯一的年份。在这里,它只是“2011”和“2012”而不是实际日期。
我试过了
plt.xticks([x for x in df_TotalDay.index.year.unique()])
但这没有用。
我知道上面的 DataFrame 看起来有点傻,但我的实际 DataFrame 非常大,当我绘制数据时,它看起来像这样:
在上图中,matplotlib 并不是每年都在 x 轴上列出。我想包括缺失的年份。
你们很亲近。您应该生成所有要显示的日期,然后添加到 xticks:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2013-02-01', '2016-01-01', '2018-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
plt.xticks(pd.date_range(df_TotalDay.index.min(), df_TotalDay.index.max(), freq='YS'))
plt.show()
要仅显示年份,您可以使用
import matplotlib.dates as mdates
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
Z Li 答案的替代方法是使用 matplotlibs dates.YearLocator
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime as dt
df = pd.DataFrame(
{
'date': ['2011-01-01', '2011-02-01', '2012-01-01', '2012-02-01', ],
'amount': [100, 200, 250, 150,],
}
)
df.date = pd.to_datetime(df.date)
df_TotalDay = df[['date','amount']].copy(deep=True)
df_TotalDay = df_TotalDay.groupby('date').amount.sum()
fig, ax = plt.subplots(figsize=(15,5))
ax.plot(df_TotalDay.index, df_TotalDay.values)
ax.set_xlabel('Year')
ax.minorticks_off()
ax.xaxis.set_major_locator(matplotlib.dates.YearLocator())
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter("%Y"))