【问题标题】:Matplotlib: How to plot graph with time(HH24:MI) as Y-axisMatplotlib:如何以时间(HH24:MI)为 Y 轴绘制图形
【发布时间】:2020-07-10 03:57:45
【问题描述】:

我正在尝试绘制一个图表,显示不同工作日期每天的工作完成时间。

我的 pandas 数据框看起来像 ...

     business_dt  job_finish_time     job_name
0    19/03/2020   20/03/2020 09:17:08 job_1
1    20/03/2020   21/03/2020 08:10:11 job_1
2    21/03/2020   22/03/2020 14:12:02 job_1
3    19/03/2020   20/03/2020 20:10:04 job_2
4    20/03/2020   21/03/2020 20:06:02 job_2
5    21/03/2020   22/03/2020 21:44:01 job_2

所以 x 轴将显示业务 dt(dates) 和 y 轴显示工作何时完成,hh24:mi:ss。

由于我对 matplotlib 还很陌生,并且在绘制 Y 轴 (hh24:Mi:ss) 时遇到了困难。谁能指导我如何使用 matplotlib 进行绘图?

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • I am having difficulty ... - 你能展示你正在尝试什么并解释它是如何不足的吗?

标签: python pandas matplotlib matplotlib-basemap


【解决方案1】:

使用 datetime.strptime 将您的数据转换为 datetime.datetime。请参阅上面的文档here

from datetime import datetime

datetime_y=[datetime.strptime(i, "%d/%m/%Y %H:%M:%S") for i in df['job_finish_time']]
datetime_x=[datetime.strptime(i, "%d/%m/%Y") for i in df['business_dt']]

plt.plot(datetime_x,datetime_y)
plt.show()

【讨论】:

    【解决方案2】:

    首先,正如@Sameeresque 所说,如果还没有,您需要将数据转换为日期时间:

    df.business_dt = pd.to_datetime(df.business_dt)
    df.job_finish_time = pd.to_datetime(df.job_finish_time)
    

    其次,我发现有必要使用

    pd.plotting.register_matplotlib_converters()
    

    为了绘制日期时间。最后,您可以使用 Pandas 日期时间序列处理来提取时间,然后正常绘图。

    为了获得正确的日期/时间格式,我不得不使用DateFormatter(基于this answer)。请注意,您的数据有点奇怪(每天有两个值),所以看起来很奇怪:

    from matplotlib.dates import DateFormatter
    
    df.business_dt = pd.to_datetime(df.business_dt)
    df.job_finish_time = pd.to_datetime(df.job_finish_time)
    
    pd.plotting.register_matplotlib_converters()
    
    f, ax = plt.subplots(figsize=(10, 10))
    ax.xaxis.set_major_formatter(DateFormatter('%d/%m/%Y'))
    ax.yaxis.set_minor_formatter(DateFormatter('%H:%M:%S'))
    ax.set_xlabel('Business dt')
    ax.set_ylabel('Job Finish Time')
    ax.plot(df.business_dt, df.job_finish_time.dt.time)
    

    输出:

    y 轴上的主要刻度线不太对,但几乎就在那里。

    【讨论】:

    • 嗨乔希,感谢您的快速回复。我试过你的代码,我确实得到了你刚才显示的结果。但是 x 轴不显示 dd/mm/yyyy 的日期,y 轴也不显示 HH24:MI:SS。我错过了什么吗?
    • 在上面的例子中,时间分量是有序的,所以 Y 轴保持有序。如果我的两个 y 轴时间戳的顺序不同怎么办,如何对它们进行排序? yaxis1 = ['06:39','15:59', '06:37','06:38'] yaxis2 = ['08:40','18:19', '08:39', '19 :34' ] 使用单个子图的折线图中的 Y 轴按以下顺序显示。 06:39, 15:59 06:37 06:38 08:40 18:19 08:39 19:34 如何将此字符串转换为时间戳 (hh24:mi) 并按顺序显示?
    • 这是一个单独的问题,请打开一个新问题而不是在 cmets 中提出后续问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    • 2016-06-24
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多