matplotlib 按指定的时间间隔生成坐标轴

简介: matplotlib 提供了自定义生成时间轴的库,而当我们需要按照自己定义的时间间隔去生成时间轴时,时间轴并没有正常显示,只是按照一个时间跨度更大的方式显示,本文强制 matplotlib 严格按照要求自定义的时间间隔来坐标轴,并对每一行代码做了详细的说明。

matplotlib 时间坐标轴的生成

matplotlib 中,当需要用到日期作为坐标轴时需要引入 matplotlib 的日期库 dates,有时候需要自定义时间间隔来显示坐标轴,而 matplotlib 往往不能正确的按照给定的时间间隔把坐标显示出来。matplotlib 的官方文档给出了简单的例子,本文给出了一个时间间隔为 10min 的例子,并详细说明了每一行代码,通过这个小例子能更加精确的细分时间刻度并让 matplotlib 正确地显示出来。
先来看看最终的效果图
效果图

完整的参考代码如下:

import matplotlib.pyplot as plt
import matplotlib.dates as md
from matplotlib.dates import MINUTELY
from matplotlib.dates import AutoDateLocator
import pandas as pd
import numpy as np


# 通过 figsize 调整图表的长宽比例,使得坐标轴上的刻度不至于太挤
fig = plt.figure(figsize=(21, 7))
ax = fig.add_subplot()

# 给定的日期格式可以有多种 20201001   2020-10-01  2020/10/01
start_time_string = "20201001 10:10:10"
end_time_string = "20201001 20:00:00"

# 根据日期生成时间轴
# freq 用来指明以多大间隔划分整个时间区间
# 10T/10min 按 10 分钟划分,同理其他常见的时间跨度有
# W 周、D 天(默认值)、H 小时、S 秒、L/ms 毫秒、U/us 微秒、N 纳秒
# 其他具体的详见 https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#offset-aliases
x = pd.date_range(start=start_time_string, end=end_time_string, freq="10T") 

#  二维上的点是相互对应的,根据 x 的个数随机生成 y 
y = np.random.random(len(x))

# x, y 按离散的关系添加在图中
ax.plot(x, y)

# 自定义时间刻度如何显示
def time_ticks(x, pos):
    # 在 pandas 中,按 10min 生成的时间序列与 matplotlib 要求的类型不一致
    # 需要转换成 matplotlib 支持的类型
    x = md.num2date(x)
    
    # 时间坐标是从坐标原点到结束一个一个标出的
    # 如果是坐标原点的那个刻度则用下面的要求标出刻度
    if pos == 0:
        # %Y-%m-%d
        # 时间格式化的标准是按 2020-10-01 10:10:10.0000 标记的
        fmt = '%Y-%m-%d %H:%M:%S.%f'
    # 如果不是是坐标原点的那个刻度则用下面的要求标出刻度
    else:
        # 时间格式化的标准是按 10:10:10.0000 标记的
        fmt = '%H:%M:%S.%f'
    # 根据 fmt 的要求画时间刻度
    label = x.strftime(fmt)
    
    # 当 fmt 有%s时需要下面的代码
    label = label.rstrip("0")
    label = label.rstrip(".")
    
    # 截断了秒后面的 .000
    return label

# 根据自己定义的方式去画时间刻度
formatter = plt.FuncFormatter(time_ticks)

# 在图中应用自定义的时间刻度
ax.xaxis.set_major_formatter(formatter)

# minticks 需要指出,值的大小决定了图是否能按 10min 为单位显示
# 值越小可能只能按小时间隔显示
locator = AutoDateLocator(minticks=20)
# pandas 只生成了满足 10min 的 x 的值,而指定坐标轴以多少的时间间隔画的是下面的这行代码
# 如果是小时,需要在上面导入相应的东东 YEARLY, MONTHLY, DAILY, HOURLY, MINUTELY, SECONDLY, MICROSECONDLY
# 并按照下面的格式照葫芦画瓢
locator.intervald[MINUTELY] = [10]  # 10min 为间隔
ax.xaxis.set_major_locator(locator=locator)

# 旋转刻度坐标的字符,使得字符之间不要太拥挤
fig.autofmt_xdate()
plt.show()
目录
相关文章
|
3月前
|
Python
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
`matplotlib`是Python中一个非常流行的绘图库,它提供了丰富的绘图接口,包括二维和三维图形的绘制。`Axes3D`是`matplotlib`中用于创建三维坐标轴的对象,而`plot_surface`则是用于在三维空间中绘制表面的函数。
|
数据可视化 数据挖掘 API
Matplotlib控制坐标轴刻度间距和标签
进行作图时需要对坐标轴进行标注,以满足学习或工作的要求,使统计图变得清晰简洁。借助Matplotlib库,可以方便的对进行数据分析,快速完成数据可视化。
4340 0
Matplotlib控制坐标轴刻度间距和标签
|
API Python
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
为什么要用 ax ,而不是 plt 呢? 因为在绘制子图过程中,对于每一个子图的不同设置,ax 可以直接实现对于单个子图的设定,因此掌握必要的 ax 设置命令尤为重要!
python matplotlib.axes相关属性设置(绘图方式、坐标轴、坐标刻度、文本等)
|
数据可视化 Python
Matplotlib数据可视化:文本与坐标轴
Matplotlib数据可视化:文本与坐标轴
Matplotlib数据可视化:文本与坐标轴
|
Python
matplotlib关于坐标轴数据显示的几个重要参数
在使用matplotlib显示数据的过程中,我在显示的时候一直达不到满意的效果,经过很多的百度和查询,先整理了这些知识点,留备以后再继续扩充。
446 0
matplotlib关于坐标轴数据显示的几个重要参数
matplotlib线型与坐标轴与四图(六)
plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为: plt.plot(X, Y, ‘format’, …) 1 点和线的样式 颜色 参数color或c 五种定义...
|
7天前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
10天前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
25 1
|
11天前
|
存储 数据可视化 数据挖掘
揭秘!Matplotlib与Seaborn联手,如何让Python数据分析结果一目了然,惊艳全场?
在数据驱动时代,高效直观地展示分析结果至关重要。Python中的Matplotlib与Seaborn是两大可视化工具,结合使用可生成美观且具洞察力的图表。本文通过分析某电商平台的商品销量数据集,展示了如何利用这两个库揭示商品类别与月份间的销售关系及价格对销量的影响。首先使用Matplotlib绘制月份销量分布直方图,再借助Seaborn的箱线图进一步探索不同类别和价格区间下的销量稳定性。
39 10
下一篇
无影云桌面