python - Matplotlib : Default Resolution of Plot Mouse-over Values

标签 python matplotlib

我正在使用 MatplotLib 绘制时间序列。时间序列值 x 轴的分辨率为 '%d/%m/%y %H:%M',但鼠标悬停时仅指示月份和年份。

我的问题是如何覆盖默认值并设置在鼠标悬停期间应显示哪些日期时间项?

我的偏好是至少显示日、月和年

................................................ ......................

例如,这是我将鼠标悬停在其中一个点上的屏幕截图: enter image description here

如您所见,(左下角)x 值给出的日期仅表示月份和年份。

放大时,显示年、月、日: enter image description here

最佳答案

鼠标悬停时显示的值由 ax.format_coord 方法控制,这意味着在需要自定义时由用户提供的方法进行猴子修补。

例如:

import matplotlib.pyplot as plt

def formatter(x, y):
    return '{:0.0f} rainbows, {:0.0f} unicorns'.format(10*x, 10*y)

fig, ax = plt.subplots()
ax.format_coord = formatter
plt.show()

还有默认 ax.format_coord 调用的 ax.format_xdataax.format_ydata,以便更轻松地自定义x 或 y 分量。

例如:

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.format_xdata = '{:0.1f}meters'.format
plt.show()

请注意,我传入了字符串的 format 方法,但它也可以很容易地成为 lambda 或任何需要单个数字参数的任意方法。

默认情况下,format_xdataformat_ydata 使用轴的主要刻度格式化程序,这就是您获得日期轴的日级分辨率的原因。

但是,您还需要将 matplotlib 的内部数字日期格式转换回“正确的”datetime 对象。因此,您可以像下面这样控制格式:

import datetime as dt
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

fig, ax = plt.subplots()

ax.xaxis_date()
ax.set_xlim(dt.datetime(2015, 1, 1), dt.datetime(2015, 6, 1))

ax.format_xdata = lambda d: mdates.num2date(d).strftime('%d/%m/%y %H:%M')

plt.show()

关于python - Matplotlib : Default Resolution of Plot Mouse-over Values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32820436/

相关文章:

python - matplotlib 中的 Widget 可以自动定位吗?

matplotlib - 关闭轴,保持刻度

python - appengine 数据存储多个 "puts"事务性能

python - 通过网页抓取计算 HTML 标签的数量

python - gevent 中的服务器和同一应用程序中的其他 greenlets

python - Pyserial - RS232 9600,8,N,1 发送和接收数据

python - Python中有没有办法通过输出参数返回一个值?

python - 如何在 matplotlib 1.4 中使用 viridis

python - 如何使用matplotlib绘制非线性函数?

python - Matplotlib 热图自动旋转图像