2017-06-20 62 views
0

的代码不同的结果: -变化语法导致输出

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' 

但是,如果我用“.set_yticks'取代” .yticks',因此不再发生错误,但刻度位置并不在列表n中的字符串替换。

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

+0

我相信不同的是选择到** **情节的y_ticks并选择设置** y_ticks值**包含在graph1对象中。 –

+0

在绘图之前,我正在设置graph1对象中的yticks的值,所以不应该将它绘制出来并修改为我? –

回答

2

您好像困惑

  1. matplotlib.pyplot.yticks:它可以“获取或设置当前刻度位置和标签的y限制”。设置标签时,它接受loc和标签,“locs是一组刻度位置,标签是一组刻度标签”。在你的情况plt.yticks(pos,n)中,posn都是合适的参数。
  2. matplotlib.axes.Axes.set_yticks:它“设置y滴答滴答列表”。它需要一个ticks参数,其中“接受:浮点序列”(对于滴答位置)。它也可以采用关键字参数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。它也可以采用一些关键字参数。

如上所述,您的plt.yticks(pos,n)设置了两个勾号位置和标签,而您的graph1.set_yticks(pos, n)只设置勾号位置。这就是为什么你没有看到y标签。如果你想设置Y标志,下面两行等于plt.yticks(pos,n)

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

非常感谢罗。问题解决了,我明白了原因。 –

+0

不客气。对不起,是多余的。我没有意识到你已经得到了答案。 –

+0

我的意思是你的答案解决了问题,我明白原因是什么。 –