代码: -
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)?
答案 0 :(得分:1)
看起来你对此感到困惑
matplotlib.pyplot.yticks
:它可以“获取或设置当前刻度位置和标签的y限制”。设置标签时,它接受位置和标签,“其中locs是一个刻度位置数组,标签是一个刻度标签数组”。在您的情况plt.yticks(pos,n)
中,pos
和n
都是合适的参数。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)
。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)