【发布时间】:2022-02-15 07:36:34
【问题描述】:
我在使用 matplotlib 时遇到了这个问题,我无法隐藏自动生成的、不需要的 xlabels,这些 xlabels 似乎不知从何而来。
这是我的代码(在重现问题的最小示例中减少了实际代码):
import datetime as dt
import matplotlib.pyplot as plt
import pandas as pd
data = pd.read_csv("TestData.csv")
# Convert string to pd.Timestamp
data["datetime"] = data["datetime"].transform(lambda d:
dt.datetime.strptime(d, '%Y-%m-%d %H:%M:%S'))
data.set_index("datetime")
# start and end dates of data in CSV
max_date = data["datetime"].max()
min_date = data["datetime"].min()
# make figure
fig = plt.figure(figsize=[24, 12], dpi=300)
ax = data.plot.line(x="datetime",
y="totalAIAD",
color="xkcd:aquamarine")
delta = max_date - min_date # total span of time for the report
time_unit = pd.to_timedelta(5, unit='m') # 5 minute ticks
floor_unit = 'T'
# floor for cleaner ticks
date = min_date.floor(floor_unit)
xticks = []
while date + time_unit <= max_date:
date = date + time_unit # create date ticks for x axis
xticks.append(date)
ax.axes.set_xticks(xticks)
str_xticks = []
for xtick in xticks:
str_xticks.append(xtick.strftime('%H:%M:%S'))
ax.axes.set_xticklabels(str_xticks, rotation=45, ha='right')
#plt.suptitle("Stream Processor and Anomaly Detector Execution times")
#plt.title("From " + min_date.strftime('%Y-%m-%d %H:%M:%S') + " to "
# + max_date.strftime('%Y-%m-%d %H:%M:%S'))
plt.xlabel(
"Time",
fontdict={
'family': 'monospace',
'color': 'xkcd:black',
'weight': 'normal',
'size': 14,
},
labelpad=6
)
plt.ylabel(
"Delays (ms)",
fontdict={
'family': 'monospace',
'color': 'xkcd:black',
'weight': 'normal',
'size': 14,
},
labelpad=6
)
[t.set_color('red') for t in ax.xaxis.get_ticklines()]
[t.set_color('red') for t in ax.xaxis.get_ticklabels()]
# vertical range for values (0 to configured MAX_Y)
plt.ylim((0, 50))
plt.grid(True, axis='y', alpha=0.5)
plt.axhline(y=10, color='r', linestyle='-')
plt.show()
plt.close(fig)
这需要一个 TestData.csv:https://www.toptal.com/developers/hastebin/uqepujujav.apache
它会产生以下输出:
如您所见,只有我在代码中设置的 xtick 标签是红色的。不受欢迎的(11:30、11:45 和 12:15)不受颜色影响。它们也不受我移除它们的所有尝试的影响。 (我试过ax.set_xticks([])、ax.set_xticklabels([])、plt.xticks([])、ax.xaxis.set_major_locator(ticker.NullLocator()))。
有什么想法吗?我已经失去了摆脱这些标签的希望。
【问题讨论】:
标签: python pandas datetime matplotlib timestamp