如何绘制对应于最高值的直线?

我有以下数据:


Date

01/27/2020    55

03/03/2020    44

02/25/2020    39

03/11/2020    39

01/28/2020    39

02/05/2020    38

03/17/2020    37

03/16/2020    37

03/19/2020    37

03/14/2020    35

03/09/2020    35

03/26/2020    33

03/06/2020    33

01/29/2020    33

03/23/2020    27

03/15/2020    27

02/26/2020    27

03/27/2020    26

03/02/2020    25

02/28/2020    25

03/24/2020    24

03/04/2020    24

01/21/2020    23

03/01/2020    21

02/27/2020    21

01/22/2020    21

02/18/2020    18

01/31/2020    18

03/22/2020    18

01/26/2020    18

03/31/2020    18

02/24/2020    17

01/20/2020    16

01/23/2020    16

03/12/2020    16

03/21/2020    15

02/29/2020    14

03/28/2020    13

02/19/2020    13

03/08/2020    13

02/04/2020    13

02/12/2020    12

02/01/2020    12

02/07/2020    12

03/30/2020    12

02/20/2020    11

03/07/2020    11

03/29/2020    11

02/09/2020    11

02/06/2020    11

使用分组。在右边,我有按日期排列的值的频率。情节是

http://img.mukewang.com/6412d58e0001bc1f08700438.jpg

产生于


fig, ax = plt.subplots(figsize=(15,7))

df.groupby(['Date']).count()['NN'].plot(ax=ax)

我想有对应于第一个最高值的垂直直线,即


01/27/2020    55

03/03/2020    44

02/25/2020    39

03/11/2020    39

01/28/2020    39

我怎么能在我的情节中添加这些线?


达令说
浏览 100回答 1
1回答

大话西游666

关于垂直线,.axvline方法应该可以解决问题。如果您尝试使用一组字符串作为索引来绘制 pandas DataFrame/Series,pandas 会在后台执行一些花哨的步法。您可能会弄乱 xticks 和各种类型,但最简单的方法是将您的列转换为datetime64.首先,让我们制作一些绒毛数据:import randomimport pandas as pdfrom string import ascii_lowercase# Make some fluffdates = [f'01/{random.randint(1,28)}/1901' for _ in range(100)]fluff = [ascii_lowercase[random.randint(1,26):random.randint(1,26)]         for _ in range(100)]# Pack into a DataFramedf = pd.DataFrame({'Date': dates, 'NN': fluff})# Aggregatecounted = df.groupby('Date').count()快速浏览一下:>>> counted               NNDate            01/10/1901      201/11/1901      601/12/1901      2...             ...您可以用它代替您拥有的任何数据。如果在执行 groupby 之前转换列,这可能是最简单的,因此:df['Date'] = pd.to_datetime(df['Date'], format='%m/%d/%Y')agg_df = df.groupby(['Date']).count()fig, ax = plt.subplots(figsize=(8,6))agg_df['NN'].plot(ax=ax)剧情和上面类似。请注意,我使用 8 x 6 的尺寸,以便figsize该图更适合 StackOverflow 页面。运行代码时将其改回 15 x 7。我使用了%m/%d/%Y格式,因为这似乎是您正在使用的格式。有关日期格式的更多信息,请参见此处:官方日期时间文档最后,直接使用 a 获取垂直线datetime:import datetime ax.axvline(datetime.datetime(1901,01,10), color='k')如果您想获得最高值的垂直直线,请对聚合的 DataFrame 进行排序,然后在 for 循环中重击它。for d in agg_df.sort_values('NN',ascending=False).index[:5]:     ax.axvline(d, color='k')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python