为了账号安全,请及时绑定邮箱和手机立即绑定

找到图形的峰值和底部并标记它们

找到图形的峰值和底部并标记它们

一只名叫tom的猫 2021-06-04 17:49:35
  df1      Date           Topic  Return      1/1/2010        A,B     -0.308648967      1/2/2010        C,D     -0.465862046      1/3/2010        E        0.374052392      1/4/2010        F        0.520312204      1/5/2010        G        0.503889198      1/6/2010        H       -1.730646788      1/7/2010        L,M,N    1.756295613      1/8/2010        K        -0.598990239      ......      1/30/2010       z         2,124355 Plot= df1.plot(x='Date', y='Return')我怎样才能找到这个图的最高点和最低点,并用相应的主题标记这些特殊点?
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt


# Take an example data

data = {"Date":["date{i}".format(i=i) for i in range(10)], "Topic":["topic{i}".format(i=i) for i in range(10)], "Return":[1,2,3,2,1,2,4,7,1,3]}

df = pd.DataFrame.from_dict(data)


dates = np.array(df["Date"].tolist())

returns = np.array(df["Return"].tolist())


# Calculate the minimas and the maximas

minimas = (np.diff(np.sign(np.diff(returns))) > 0).nonzero()[0] + 1 

maximas = (np.diff(np.sign(np.diff(returns))) < 0).nonzero()[0] + 1


# Plot the entire data first

plt.plot(dates, returns)

# Then mark the maximas and the minimas

for minima in minimas:

    plt.plot(df.iloc[minima]["Date"], df.iloc[minima]["Return"], marker="o", label=str(df.iloc[minima]["Topic"]))

for maxima in maximas:

    plt.plot(df.iloc[maxima]["Date"], df.iloc[maxima]["Return"], marker="o", label=str(df.iloc[maxima]["Topic"]))


plt.legend()

plt.show()

示例数据框:


   Date   Topic  Return

0  date0  topic0       1

1  date1  topic1       2

2  date2  topic2       3

3  date3  topic3       2

4  date4  topic4       1

5  date5  topic5       2

6  date6  topic6       4

7  date7  topic7       7

8  date8  topic8       1

9  date9  topic9       3

绘制它产生: 

//img1.sycdn.imooc.com//60bf38690001e3d911120824.jpg

查看完整回答
反对 回复 2021-06-08
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信