首页 > 解决方案 > 在中心显示轴,但在左侧保留标签

问题描述

我试图绘制一个以零为中心的分布,因此我想在 0 处显示 y 轴脊椎,但我想将刻度标签本身保持在图形的左侧(即在绘图区域之外) . 我认为这可能可以通过 实现tick_params,但该labelleft选项似乎将标签保持在中心。一个简短的例子如下:

import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1)

vals = np.random.normal(loc=0, scale=10, size=300)
bins = range(int(min(vals)), int(max(vals))+1)

fig, ax = plt.subplots(figsize=(15,5))
ax.hist(vals, bins=bins)

ax.spines['left'].set_position('zero')
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

ax.grid(axis='y', which='major', alpha=0.5)

plt.show()

这给了你:

以零为中心的直方图

我希望标签位于网格线的左端,而不是图的中心。

标签: pythonpandasmatplotlib

解决方案


可能不是最好的解决方案,但您可以将左刺设置为不可见并在 0 处绘制一条直线:

ax.spines['left'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)

ax.plot((0,0), (0,ax.get_ylim()[-1]),color='k',linewidth=1)
ax.grid(axis='y', which='major', alpha=0.5)

plt.show()

输出:

在此处输入图像描述


推荐阅读