xtick标签中的Matplotlib换行符

时间:2017-09-29 17:41:51

标签: python matplotlib

我已经看到了一堆解决方案(包括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后端。

1 个答案:

答案 0 :(得分:2)

默认情况下,相同的格式化程序用于NavigationToolbar中显示的值和轴上的值。我想您只想使用问题格式"%m-%d\n%H:%M"进行ticklabel格式化,并且很高兴使用单行格式显示移动鼠标时显示的值。

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

# 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()