matplotlib - 使用 plot_date 时强制刻度出现在特定日期
问题描述
此代码将生成下图:
import math
import matplotlib.pyplot as plt
from matplotlib.dates import (YEARLY,HOURLY, DateFormatter,
drange)
import datetime
date1 = datetime.datetime(1952, 1, 1, 1, 1, 1)
date2 = datetime.datetime(1952, 1, 1, 23, 59, 59)
delta = datetime.timedelta(minutes= 10)
dates = drange(date1, date2, delta)
y = [math.sin(x/10.0) for x,_ in enumerate(dates)]
fig, ax = plt.subplots()
plt.plot_date(dates, y)
plt.plot_date([dates[15],dates[121]], [y[15], y[121]], marker="*", c="yellow", markersize=20)
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))
ax.xaxis.set_tick_params(rotation=45, labelsize=10)
fig.autofmt_xdate()
plt.show()
我想指出用星号标记的两个事件何时发生。
如何强制 pyplot 在两颗星的位置下画一个刻度?
我发现我需要使用自定义定位器。但具体如何?看起来它只会产生均匀间隔的标尺。
rule = rrulewrapper(???)
loc = RRuleLocator(rule)
解决方案
如果您有一个已定义的刻度位置,您可以使用FixedLocator
.
import math
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter, drange
from matplotlib.ticker import FixedLocator
import datetime
date1 = datetime.datetime(1952, 1, 1, 1, 1, 1)
date2 = datetime.datetime(1952, 1, 1, 23, 59, 59)
delta = datetime.timedelta(minutes= 10)
dates = drange(date1, date2, delta)
y = [math.sin(x/10.0) for x,_ in enumerate(dates)]
fig, ax = plt.subplots()
plt.plot_date(dates, y)
events, = plt.plot_date([dates[15],dates[121]], [y[15], y[121]],
marker="*", c="r", markersize=20, ls="")
ax.xaxis.set_major_formatter(DateFormatter('%H:%M:%S'))
ax.xaxis.set_tick_params(which="major", rotation=30, labelsize=9)
ax.xaxis.set_minor_locator(FixedLocator(events.get_xdata()))
ax.xaxis.set_minor_formatter(DateFormatter('%H:%M:%S'))
ax.xaxis.set_tick_params(which="minor", rotation=30, labelsize=10, labelcolor="r")
plt.setp(ax.get_xticklabels(which="both"), ha="right")
plt.show()
我将特殊的刻度标签设为红色,因为它们与现有的刻度标签重叠。我想你需要自己决定你希望它最终如何出现。
推荐阅读
- reactjs - 反应自定义颜色图表
- javascript - GAME_WIDTH、GAME_HEIGHT 和 gameWidth、gameHeight
- selenium - 如果页面有元素和netx来获取条件,如何检查robotframework?
- javascript - Bootstrap 5 - 按钮上的下拉菜单和工具提示?
- php - 多张照片和文字通过php中的ajax
- python - 蟒蛇硒。如何通过单击打开网页上的多个链接
- angular - 编写测试以确保从订阅块调用函数
- c++ - Lambda vs. 手动内联代码改变了 GCC 的优化器行为
- subdomain - 具有许多子域的站点的许可
- r - 从库中导入数据集的不同方法