【问题标题】:Show axis at center, but keep labels on the left [duplicate]在中心显示轴,但在左侧保留标签[重复]
【发布时间】:2019-06-19 14:22:39
【问题描述】:

我试图绘制一个以零为中心的分布,因此我想在 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()

这给了你:

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

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    可能不是最好的解决方案,但您可以将左刺设置为不可见并在 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()
    

    输出:

    【讨论】:

    • 第一个想法不错,虽然我认为我会用ax.axvline(x=0, color='k', lw=1) 做垂直线,因为它应该更可靠。
    【解决方案2】:

    可能是指示刻度标签使用“轴坐标”作为它们的 x 位置,使用“数据坐标”作为它们的 y 位置。这意味着更改他们的 tranform 属性。

    import matplotlib.pyplot as plt
    import numpy as np
    import matplotlib.transforms as transforms
    
    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()
    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)
    
    trans = transforms.blended_transform_factory(ax.transAxes,ax.transData)
    plt.setp(ax.get_yticklabels(), 'transform', trans)
    
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2022-12-11
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 2018-08-15
      • 2022-11-17
      • 1970-01-01
      相关资源
      最近更新 更多