python - Matplotlib x 轴刻度,日期的固定位置
问题描述
在我正在制作的时间线图中,我希望日期代码只显示指定的日期。(在我的示例中,我显示事件“A”的代码,但它可以是代码上的任何列表)。我发现了当 x 轴数据为数字时(在我的示例中为上子图)如何执行此操作,但这不适用于时间戳日期类型(下图)。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import matplotlib.ticker as ticker
myData = pd.DataFrame({'date':['2019-01-15','2019-02-10','2019-03-20','2019-04-17','2019-05-23','2019-06-11'],'cnt':range(6),'event':['a','b','a','b','a','b']})
myData['date'] = [pd.Timestamp(j) for j in myData['date']]
start = pd.Timestamp('2019-01-01')
stop = pd.Timestamp('2019-07-01')
inxa = myData.loc[myData['event'] == 'a'].index
inxb = myData.loc[myData['event'] == 'b'].index
# create two plots, one with 'cnt' as x-axis, the other 'dates' on x-axis.
fig, ax = plt.subplots(2,1,figsize=(16,9))
ax[0].plot((0,6),(0,0), 'k')
ax[1].plot((start, stop),(0,0))
for g in inxa:
ax[0].plot((myData.loc[g,'cnt'],myData.loc[g,'cnt']),(0,1),c='r')
ax[1].plot((myData.loc[g,'date'],myData.loc[g,'date']),(0,1),c='r')
for g in inxb:
ax[0].plot((myData.loc[g,'cnt'],myData.loc[g,'cnt']),(0,2),c='b')
ax[1].plot((myData.loc[g,'date'],myData.loc[g,'date']),(0,2),c='b')
xlist0 = myData.loc[myData['event']=='a','cnt']
xlist1 = myData.loc[myData['event']=='a','date']
ax[0].xaxis.set_major_locator(ticker.FixedLocator(xlist0))
# ax[1].xaxis.set_major_locator(**???**)
解决方案
找不到足够的副本,也许我看起来不够努力。有多种方法可以做到这一点:
首先转换为数字或使用 Pandas DateTime Series 的基础值
xticks = [mdates.date2num(z) for z in xlist1]
# or
xticks = xlist1.values
以及至少几种使用它/它们的方法
ax[1].xaxis.set_major_locator(ticker.FixedLocator(xticks))
ax[1].xaxis.set_ticks(xticks)
推荐阅读
- perl - Perl:迭代哈希不适用于 while 条件中的嵌套 grep
- r - R中命名data.frames列表中的匹配对
- autodesk-forge - 为什么最新版本的 forge 查看器会破坏我的 onClick 监听器?
- javascript - 在 ReactJS 中创建 Closure 或 IIFE 以处理 onclick 事件的正确方法是什么
- c# - 如何使用 GraphServiceClient Microsoft Graph API 获取 MimeContent
- typescript - 不能在打字稿上使用 d3 v5 上的提示?
- c# - Unity 问题说我的 Transformation Child 超出范围
- java - 错误:int 无法转换为布尔值
- arrays - 如何在具有相同属性值的对象旁边插入数组中的对象
- javascript - 当我看不到浏览器进行任何交互时,看到量角器黄瓜测试通过是否正确?