【问题标题】:matplotlib plot set x_ticksmatplotlib 绘图集 xticks
【发布时间】:2013-12-02 18:32:34
【问题描述】:

如何将索引 1、2、3....n 处的 x_axis 标签设置为不同的值。

lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
chunks = [chunk1,chunk2,...chunk_n]
ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
color='rgbycmk'
     j=0
     for chunk in chunks:
        plt.plot([hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)],[i for i,item in enumerate(lam_beta)],color=j%len(color))
        j+=1

     plt.set_xticks([i for i,item in enumerate(lam_beta)])
     plt.set_xticklabels([item for item in lam_beta],rotation='vertical')
     plt.show()

错误:

AttributeError: 'module' 对象没有属性 'set_xticks'

这里我无法将 lambda_beta 元组的值设置为 x 轴上每个刻度的值,因为它说 plt 没有这种方法。我将如何为 plt 实现这一目标?我使用 xticks 是因为我在 matplotlib 中生成直方图时就是这样做的。任何帮助,将不胜感激。提前致谢!

【问题讨论】:

    标签: python matplotlib linegraph


    【解决方案1】:

    set_xticksset_xticklabels 是轴方法,而不是 plt 模块命名空间中的函数。这就是错误信息的意思,'module' object has no attribute 'set_xticks'

    此外,

    [i for i,item in enumerate(lam_beta)]
    

    可以简化为

    range(len(lam_beta))
    

    [item for item in lam_beta]
    

    可以简化为

    lam_beta
    

    联系axes 的便捷方式是致电 plt.subplots:

    所以:

    fig, ax = plt.subplots()
    ...
    ax.set_xticks(range(len(lam_beta)))
    ax.set_xticklabels(lam_beta, rotation='vertical')
    

    ax 是一个 Axes 对象。调用 Axes 方法是使用 matplotlib 的面向对象的方法。


    或者,您可以通过调用 plt.xticks 来使用 Matlab 样式的 pylab 接口。如果我们定义

    loc = range(len(lam_beta))
    labels = lam_beta
    

    然后

    plt.xticks(loc, labels, rotation='vertical')
    

    等价于

    fig, ax = plt.subplots()
    ax.set_xticks(loc)
    ax.set_xticklabels(labels, rotation='vertical')
    

    plt.xticks 将刻度位置和标签设置为当前坐标区。


    列表理解

    [hr_values_per_chunk[chunk][i] for i,item in enumerate(lam_beta)]
    

    可以简化为

    hr_values_per_chunk[chunk][:len(lam_beta)]
    

    您可以避免使用ax.set_color_cycle 将每次调用的color 参数设置为ax.plot

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    lam_beta = [(lam1,beta1),(lam1,beta2),(lam1,beta3),....(lam_n,beta_n)]
    chunks = [chunk1,chunk2,...chunk_n]
    ht_values_per_chunk = {chunk1:[val1,val2,...],chunk2:[val1,val2,val3,.....]...}
    color='rgbycmk'
    ax.set_color_cycle(colors)
    
    for chunk in chunks:
        vals = hr_values_per_chunk[chunk][:len(lam_beta)]
        ax.plot(vals, range(len(lam_beta)))
    
    ax.set_xticks(range(len(lam_beta)))
    ax.set_xticklabels(lam_beta, rotation='vertical')
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-11
      • 1970-01-01
      • 2023-03-26
      • 2023-03-19
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多