如何制作时间序列图并标记 Python Pandas 中销售额最高的 5 天?

How to make Time Series plot and mark 5 days with the highest sales in Python Pandas?

我在 Python Pandas 中有 DataFrame,如下所示:

我需要创建时间序列图并用单独的颜色标记销售额最高的 5 天。

目前我有如下代码:

df['sales'].plot(linewidth=1.5,
                 grid = True,
                 marker="o",
                 linestyle="-",
                 markersize=4,
                 label="Daily sales",
                 color = "steelblue")
plt.xlabel("date")
plt.ylabel("sales")
plt.legend()
plt.show()

它给出了结果:

但作为最终结果,我需要如下内容:

我如何在 Python 中做到这一点?我如何修改我的代码或以其他方式进行修改?

mrCopiCat 我使用了您的代码,结果如下所示,为什么?

嗯,您可以将 matplotlib 中内置的 ax.annotate 函数与 ax.vlines 一起使用。这是一个最大值为 5 的示例(我确实为日期使用了简单的 int 值(为了示例),但它肯定会与您的日期时间值一起使用):

import numpy as np
import pandas as pd
import random
import matplotlib.pyplot as plt

# init figure and axis
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set(title="maximum sales ...")

# sample df
data = {'date_col': list(range(20)), 'sales': [random.randint(1, 30) for _ in range(20)]}
df = pd.DataFrame.from_dict(data).set_index('date_col')

# plotting the df
df.plot(ax=ax)

# adding the lines
num_max = 5 # change this if you want more or less points

for row in df.sort_values(by='sales', ascending=False).iloc[:num_max].iterrows():
    print(row[0], row[1])
    xmax, ymax = row[0], row[1]
    ax.vlines(xmax, 0, ymax, color="tab:red") 
    ax.annotate(f'{xmax}', xy=(xmax, ymax), xytext=(xmax, ymax + 1), color="tab:red")

# setting size limit and plotting
ax.set_ylim(0,40) # change or remove that too
plt.show()

输出: