使用 matplotlib 在刻度标签中创建包含日期和时间的图表
我的数据位于以下结构的数组中,
[[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]]
第一列是纪元时间(以 ms
为单位),第二列是 y1
,第三列是 y2
>。我需要一个 x 轴为时间、左右 y 轴为 y1 和 y2 的绘图。
我一直在搜索文档,但找不到任何方法让我的 x 轴刻度显示日期和时间,例如“28/12 16:48”,即“日期/月份小时:分钟”。所有文档帮助我的只是单独显示日期,但这不是我想要的。
它实际上是我的上一个问题的后续问题。
I have my data in an array of the following structure,
[[1293606162197, 0, 0],
[1293605477994, 63, 0],
[1293605478057, 0, 0],
[1293605478072, 2735, 1249],
[1293606162213, 0, 0],
[1293606162229, 0, 0]]
The first column is epoch time (in ms
), second is y1
and third is y2
. I need a plot with the time on the x-axis, and y1
and y2
on left and right y-axes.
I have been scouring through the documentation but couldn't find any way to get my x-axis ticks to display both date and time, like "28/12 16:48", i.e., "date/month hour:min". All the documentation helps me with is to display dates alone, but that is not what I want.
It is actually a follow-up to my previous question.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我希望这有帮助。我一直很难理解 matplotlib 的日期。 Matplotlib 需要 浮点格式,即自纪元以来的天数。辅助函数
num2date
和date2num
以及 python 内置datetime
可用于相互转换。格式化业务是从此示例中提取的。您可以使用set_major_formatter
将任何绘图上的轴更改为日期轴。I hope this helps. I've always had a hard time with matplotlib's dates. Matplotlib requires a float format which is days since epoch. The helper functions
num2date
anddate2num
along with python builtindatetime
can be used to convert to/from. The formatting business was lifted from this example. You can change an axis on any plot to a date axis usingset_major_formatter
.在 matplotlib 的最新版本(例如 3.7.0)中,不需要显式地将日期转换为数字,matplotlib 在内部处理它。因此,只需将日期时间对象作为 x 值传递即可。
要显示自定义刻度,可以使用
DateFormatter
以及MinuteLocator
/MicrosecondLocator
等(取决于时间组件的分辨率)。如果您不太关心日期时间如何显示为 x 刻度,则有
matplotlib.dates.ConciseDateFormatter
可以为您进行“漂亮”的格式化。对于手头的示例,它看起来像:In more recent versions of matplotlib (e.g. 3.7.0), there's no need to explicitly convert date to numbers, matplotlib handles it internally. So simply passing the datetime objects as x-values works.
To show custom ticks,
DateFormatter
along withMinuteLocator
/MicrosecondLocator
etc. (depending on the resolution of the time component) can be used.If you don't particularly care how datetime is shown as x-ticks, there
matplotlib.dates.ConciseDateFormatter
that does "pretty" formatting for you. For the example at hand, that would look like: