以下方法:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.randint(50, 89, 80)
bins = np.arange(50, data.max()+6, 5)
fig, ax = plt.subplots(figsize=(12,5))
ax.hist(data, bins=bins, fc='skyblue', ec='navy')
false_zero = bins[0] - 10
ax.set_xticks(np.append(false_zero, bins))
ax.set_xticklabels(np.append(0, bins))
for spine in ['top', 'right', 'bottom']:
ax.spines[spine].set_visible(False)
ax.add_line(plt.Line2D(xdata=[false_zero, false_zero + 2, false_zero + 4, false_zero + 4, false_zero + 6, bins[-1] + 1],
ydata=[0, 0, 0.1, -0.1, 0, 0],
color=ax.spines['bottom'].get_edgecolor(), lw=ax.spines['bottom'].get_linewidth(),
clip_on=False, transform=ax.get_xaxis_transform()))
plt.tight_layout()
plt.show()
PS:对于原始帖子的纠结:
ax.add_line(plt.Line2D(xdata=[false_zero, false_zero + 2, false_zero + 2, false_zero + 6, false_zero + 6, bins[-1] + 1],
ydata=[0, 0, 0.1, -0.1, 0, 0], ...))