I'm having this problem with matplotlib where I'm unable to hide automatically generated, undesired xlabels that seemingly come out of nowhere.
Here is my code (reduced actual code in this minimal example which reproduces the problem):
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)
As you can see only the xtick labels that I'm setting in my code are red. The undesired ones (11:30, 11:45 and 12:15) are unaffected by color. They are also unaffected by all attempts I had of removing them. (I tried ax.set_xticks([])
, ax.set_xticklabels([])
, plt.xticks([])
, ax.xaxis.set_major_locator(ticker.NullLocator())
).
Any idea? I'm losing hope I'll ever get rid of those labels.
CodePudding user response:
By using pandas plotting with dates as x-axis, automatically the AutoDateLocator
and AutoDateFormatter
are set. These set their own ticks, independent from set_xticks
(and also calculate new ticks when you're zooming). See also