Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 更改errorbar绘图中的x轴标签:无属性';获取xTicklabel';_Python_Python 3.x_Matplotlib - Fatal编程技术网

Python 更改errorbar绘图中的x轴标签:无属性';获取xTicklabel';

Python 更改errorbar绘图中的x轴标签:无属性';获取xTicklabel';,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我正在尝试绘制一些数据,主要的绘图信息是 ax1 = plt.errorbar(df1.index, df1['Mean'], yerr=df1['SD'], color='black', linestyle='-') ax2 = plt.errorbar(df2.index, df2['Mean'], yerr=df2['SD'], color='grey', linestyle='-') 问题是每个数据帧索引是整体的5%增量(即d

我正在尝试绘制一些数据,主要的绘图信息是

ax1 = plt.errorbar(df1.index, df1['Mean'],
               yerr=df1['SD'], color='black', linestyle='-')
ax2 = plt.errorbar(df2.index, df2['Mean'],
               yerr=df2['SD'], color='grey', linestyle='-')
问题是每个数据帧索引是整体的5%增量(即df1索引是0,5,10…100,df2也是如此)。结果是绘图试图在x轴上填充40个标签

我尝试过几种不同的方法,但迄今为止没有一种有效。例如,尝试旋转标签并减小字体大小,例如:

plt.setp(ax1.get_xticklabels(), rotation='vertical', fontsize=7)
返回

AttributeError: 'ErrorbarContainer' object has no attribute 'get_xticklabels'
如果我尝试使用
勾选参数

我认为这可能是因为情节将x轴视为绝对的,但我不知道如何修复它


理想情况下,我只想显示ax1和ax2的0、25、50、75和100%标签,但在这一点上,我很乐意旋转它们,使它们看起来更好。

问题是,您使用的是绘图的句柄(错误条的句柄),而不是轴的句柄。有两种方法可以获取轴的控制柄:

  • 创建图形(或实际上的轴)时
  • 您可以随时使用
    plt.gca()
    获取当前轴的句柄
  • 例如:

    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots()
    
    ax.errorbar([0,1,2], [0,1,2], yerr=[.01,.05,.1])
    ax.errorbar([0,1,2], [0,2,4], yerr=[.01,.05,.1])
    
    plt.setp(ax.get_xticklabels(), rotation='vertical', fontsize=7)
    
    plt.show()
    
    这将导致:

    如果要使用当前轴的控制柄,还可以使用:

    plt.setp(plt.gca().get_xticklabels(), rotation='vertical', fontsize=7)
    

    您需要轴的控制柄,而不是绘图的控制柄。您可以使用
    plt.setp(plt.gca(),…
    。或者您可以在创建图形时获取句柄:
    fig,ax=plt.subplot()
    ,其中
    ax
    是句柄。谢谢。我正在使用
    plt.setp(plt.gca(ax1.set\uxticklabels(rotation=40,ha=“right”))
    但我收到了相同的错误消息。我假设我的语法是错误的?我已将我的注释升级为完整的答案,以唯一地定义语法。希望这会有所帮助!非常感谢扩展的描述。我怀疑,和许多新手一样,在熟悉python和pandas之后,我对Matplotlib.Yo的语法有点费劲你的第二个建议完全解决了我的问题。我很好奇,如果我有两个ax绘图,第一个解决方案会如何工作?第二个
    ax1=plt.subplot()
    是在同一行中引入的还是作为
    plt.show()之前的第二组绘图信息引入的
    。再次感谢您的帮助。@nick.sculthorpe我感觉您将一个轴与一个(n)(绘图)对象缠绕在一起。一个轴可以容纳多个绘图对象,正如我在编辑中所述。除此之外,一个图形可以容纳多个轴(子绘图),但我觉得这不是你的意思?非常感谢!这正是我的意思。我不是按照你的例子在同一个图上叠加不同的图,而是在同一个图上放置不同的线。太好了。再次感谢。