线图不显示轴上的所有日期
Posted
技术标签:
【中文标题】线图不显示轴上的所有日期【英文标题】:Lineplot doesn't show all dates in axis 【发布时间】:2019-06-08 17:03:51 【问题描述】:我有以下几点:
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)
结果
当我使用条形图 (sns.barplot
) 时,会显示整个日期范围。我错过了折线图的东西吗?我
【问题讨论】:
就像通常的地块一样,您会在这里看到非常合适的标签,每半年一次。您想在绘图中有数据的每个位置上显示标签吗? (请注意,在这种情况下标签可能会重叠) @ImportanceOfBeingErnest 正确,我知道重叠,这就是我添加旋转(45 或 90)的原因。我知道“默认”会整齐地呈现它,但为此目的,日期(文本)至关重要。谢谢 那么将xticks=df.Date
添加到.set()
中是否符合您的要求?
所以如果我理解正确的话,我做了: ax.set(xlabel="Date", ylabel="mpta", ticks=df_dry['Date']) 返回结果: AttributeError: Unknown property滴答声
我得到:无法将“时间戳”类型与“浮点”类型进行比较。只是为了确定:我检查了一下,日期是 pandas.core.series.Series (type(df_dry['Date'])
【参考方案1】:
我们的想法是将 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()
注意如果没有 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()
【讨论】:
【参考方案2】:规避 Seaborn 中日期刻度稀疏化的一种方法是将日期列转换为字符串值。
df['dates_str'] = df.dates.astype(str)
使用新列作为 x 轴绘图将显示所有日期。
【讨论】:
以上是关于线图不显示轴上的所有日期的主要内容,如果未能解决你的问题,请参考以下文章