线图未在轴上显示所有日期

时间:2019-01-14 17:05:22

标签: python pandas matplotlib jupyter-notebook seaborn

我有以下内容:

fig, ax = plt.subplots(figsize=(40, 10))
sns.lineplot(x="Date", y="KFQ imports", data=df_dry, color="BLACK", ax=ax)
sns.lineplot(x="Date", y="QRR imports", data=df_dry, color="RED",ax=ax)

ax.set(xlabel="Date", ylabel="Value", )
x_dates = df_dry['Date'].dt.strftime('%b-%Y')
ax.set_xticklabels(labels=x_dates, rotation=45)

结果 enter image description here

使用条形图(sns.barplot)时会显示整个日期范围。我是否缺少折线图?我

1 个答案:

答案 0 :(得分:2)

想法是将xticks设置为数据框中的确切日期。为此,您可以使用set_xticks(df.Date.values)。然后,最好对日期使用自定义格式化程序,这样就可以按照所需的方式对其进行格式化。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import dates
import seaborn as sns

df = pd.DataFrame({"Date" : ["2018-01-22", "2018-04-04", "2018-12-06"],
                   "val"  : [1,2,3]})
df.Date = pd.to_datetime(df.Date)


ax = sns.lineplot(data=df, x="Date", y="val", marker="o")
ax.set(xticks=df.Date.values)
ax.xaxis.set_major_formatter(dates.DateFormatter("%d-%b-%Y"))
plt.show()

enter image description here

请注意,如果没有seaborn,就可以实现相同的效果,

ax = df.set_index("Date").plot(x_compat=True, marker="o")
ax.set(xticks=df.Date.values)
ax.xaxis.set_major_formatter(dates.DateFormatter("%d-%b-%Y"))
plt.show()