线图不显示轴上的所有日期

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 轴绘图将显示所有日期。

【讨论】:

以上是关于线图不显示轴上的所有日期的主要内容,如果未能解决你的问题,请参考以下文章

mpld3 不能正确显示 x 轴上的日期

处理 d3.js 轴上的日期

使用 ggplot 在折线图中仅绘制 x 轴上的日期向量的值

在日期轴上绘制函数

课程日期 x 轴上的 ggplot geom_vline

Grafana:x 轴上没有日期时间的折线图