语法中的更改会导致输出结果不同

时间:2017-06-20 22:29:03

标签: python python-3.x matplotlib

代码: -

    def build_graph_year(self,year):
    data=self.req_da(0,year)
    n=[]
    h=[]
    for i in data:
        t=''
        for x in range(0,len(i),1):
            z=i[x]
            if z!='-':
                t=t+z
            if z=='-':
                n.append(t)
                h.append(i[x+1:])
    fig=plt.figure("Graph For Year {0}".format(year))
    rect=fig.patch
    rect.set_facecolor('green')
    pos=np.arange(0,len(n),1)+1
    graph1=fig.add_subplot(1,1,1)
    graph1.barh(pos,h,align='center',color='r')
    graph1.set_xlabel('Height',color='w')
    graph1.set_ylabel('Names',color='w')
    graph1.set_title('Height Of Students in the year {0}'.format(year),color='w')
    graph1.tick_params(axis='x',color='w')
    graph1.tick_params(axis='y',color='w')
    graph1.spines['top'].set_color('black')
    graph1.spines['bottom'].set_color('black')
    graph1.spines['left'].set_color('black')
    graph1.spines['right'].set_color('black')
    plt.yticks(pos,n)#OVER HERE
    plt.show()

代码工作正常。但当我换掉" plt"在" graph1"的第二行最后一行,刻度位置不再被存储在列表n中的字符串替换。而是发生错误: -

 Traceback (most recent call last):
 File "F:\Python\Python-Programs\Graph_use_1_heights.py", line 109, in <module>
   h.build_graph_year('2016')
 File "F:\Python\Python-Programs\Graph_use_1_heights.py", line 105, in build_graph_year
   graph1.yticks(pos,n)
AttributeError: 'AxesSubplot' object has no attribute 'yticks'

但是,如果我更换&#39; .yticks&#39;使用&#39; .set_yticks&#39;,不会再出现错误,但是刻度线位置不会被列表n中的字符串替换。

为什么会发生这种情况,graph.set_yticks(pos,n)之间有什么区别? 和plt.yticks(pos,n)?

1 个答案:

答案 0 :(得分:1)

看起来你对此感到困惑

  1. matplotlib.pyplot.yticks:它可以“获取或设置当前刻度位置和标签的y限制”。设置标签时,它接受位置和标签,“其中locs是一个刻度位置数组,标签是一个刻度标签数组”。在您的情况plt.yticks(pos,n)中,posn都是合适的参数。
  2. matplotlib.axes.Axes.set_yticks:它“用刻度列表设置y刻度”。它需要一个ticks参数“ACCEPTS:浮点序列”(用于刻度位置)。它还可以使用关键字参数minor这是一个布尔变量。在您的情况graph1.set_yticks(pos, n)中,pos是一个合适的参数,但转换n并将其视为布尔值True。换句话说,您的graph1.set_yticks(pos, n)等于graph1.set_yticks(pos, True)
  3. matplotlib.axes.Axes.set_yticklabels:它“使用字符串标签列表设置y刻度标签”。它需要一个labels参数,可以是您的n。它也可以采用一些关键字参数。
  4. 如上所述,您的plt.yticks(pos,n)设置了刻度线位置和标签,而graph1.set_yticks(pos, n)只设置了刻度线位置。这就是你没看到y标签的原因。如果要设置y标签,则以下两行等于plt.yticks(pos,n)

    graph1.set_yticks(pos)
    graph1.set_yticklabels(n)