散点图覆盖的 matplotlib 轴刻度标签(使用脊柱)

matplotlib axis tick labels covered by scatterplot (using spines)

我想让我的轴通过散点图中的原点 (0,0),这就是我在下面的示例中设置书脊位置的原因。问题是我在散点图上的实际数据点覆盖了轴刻度标签,因此看不到它们。

如何让 matplotlib 'overwrite' 带有我的轴刻度标签的数据点,以便可以看到它们?

import numpy as np
from matplotlib import pyplot as plt
plt.style.use('ggplot')


x = np.random.randn(5000)
y = np.random.randn(5000)

f, ax = plt.subplots()
plt.scatter(x,y)
ax.spines['left'].set_position('zero')
ax.spines['left'].set_color('black')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['bottom'].set_color('black')
ax.spines['top'].set_color('none')

plt.show()

您可以通过将散点图的 zorder 设置为 <0

来解决此问题

例如:

plt.scatter(x,y,zorder=-5)

不幸的是,即便如此,它们在 ggplot 风格中也不是很明显:

如果更改散点图和标签的颜色(请注意,下图中标签明显位于散点图上方),您可以更清楚地看到这一点,因此您可能需要进行实验才能找到适合您的内容喜欢

ax.tick_params(labelcolor='r')
plt.scatter(x,y,color='w',zorder=-5)

另一种选择是添加

ax.set_axisbelow(False)

执行 plt.scatter() 后,输出为