【问题标题】:Matplotlib newline character in xtick labelxtick 标签中的 Matplotlib 换行符
【发布时间】:2017-09-29 17:41:51
【问题描述】:

我已经看到了一堆解决方案(包括 matplotlib 示例代码),要使 x-tick 标签为多行,您只需引入换行符即可。我做了什么(下面是添加此换行符的代码摘录):

subplot.xaxis.set_major_formatter(mdates.DateFormatter("%m-%d\n%H:%M", tz=startTime.tzinfo))

但是,我注意到这引入了一个奇怪的怪癖,当我将鼠标悬停在地块上时,它会导致所有地块上下“跳跃”(稍微向上移动,然后当我再次鼠标悬停时又向下移动)。注意:如果只有一个绘图,则底部的 matplotlib 工具栏(带有保存按钮等)只会上下移动。当您尝试移动鼠标并与绘图进行交互时,这会使您看起来不愉快。我注意到当我取出换行符时,这个怪癖消失了。其他人遇到这个并解决它(如保持多行标签没有这个奇怪的“跳转”怪癖)?

我正在使用 Python 3.6 和 matplotlib 1.5.3。使用 TKAgg 后端。

【问题讨论】:

标签: python matplotlib


【解决方案1】:

默认情况下,导航工具栏中显示的值与轴上显示的值相同。我想您只想将"%m-%d\n%H:%M" 格式用于刻度标签格式,并且很乐意为移动鼠标时显示的值使用单行格式。

这可以通过对这两种情况使用不同的格式化程序来实现。

# Format tick labels
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m-%d\n%H:%M"))
# Format toolbar coordinates
ax.fmt_xdata = mdates.DateFormatter('%m-%d %H:%M')

示例图片:

完整的复制代码:

import matplotlib
matplotlib.use("TkAgg")
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import numpy as np

dates = pd.date_range("2016-06-01 09:00", "2016-06-01 16:00", freq="H" )

y = np.cumsum(np.random.normal(size=len(dates)))
df = pd.DataFrame({"Dates" : dates, "y": y})

fig, ax = plt.subplots()
ax.plot_date(df["Dates"], df.y, '-')

ax.xaxis.set_major_locator(mdates.HourLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter("%m-%d\n%H:%M"))

ax.fmt_xdata = mdates.DateFormatter('%m-%d %H:%M')

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-02
    • 2014-07-25
    • 2016-07-24
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多