2017-08-19 70 views
0

私は5 x 4プロットをプロットしたいと思います。そのためのコードは、エラーが'numpy.ndarray' object has no attribute 'barh'と言う 'numpy.ndarray'オブジェクトには属性 'barh'がありません。どのように修正するのですか?

以下
fig, axis = plt.subplots(5, 4,figsize=[25,10]) 
i = 0 
for channel in np.unique(data_recent['channel_id']): 
    for year in np.unique(data_recent['year']): 
     filter_data = data_recent.loc[(data_recent['channel_id']==str(channel)) & (data_recent['year']==year)] 
     topics_count = [] 
     for topic in list(sumbags.keys()): 
      topics_count.append([topic, filter_data[str(topic)].sum()]) 
     topics_group = pd.DataFrame(topics_count, columns = ['topics','count']) 
     topics_group = topics_group.sort_values(by='count', ascending=False)[:5] 
     print (channel, year) 
     print (topics_group) 

     sns.barplot(x = 'count', y = 'topics', data = topics_group, ax = axis[i]) 
     axis[i].set_title("Top 5 topics for " + str(channel) + " " + str(year)) 
     axis[i].set_ylabel("Topics") 
     axis[i].set_xlabel("Count") 
     fig.subplots_adjust(hspace=0.4)  
     fig.subplots_adjust(wspace=0.4) 
     i += 1 

print (i) 

です。助けてください。

完全なエラーは以下のとおりです。

AttributeError       Traceback (most recent call last) 
<ipython-input-511-edab5430d06a> in <module>() 
    12   print (topics_group) 
    13 
---> 14   sns.barplot(x = 'count', y = 'topics', data = topics_group, ax = axis[i]) 
    15   axis[i].set_title("Top 5 topics for " + str(channel) + " " + str(year)) 
    16   axis[i].set_ylabel("Topics") 

C:\Users\Sujoy\Anaconda3\lib\site-packages\seaborn\categorical.py in barplot(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, orient, color, palette, saturation, errcolor, errwidth, capsize, ax, **kwargs) 
    2902   ax = plt.gca() 
    2903 
-> 2904  plotter.plot(ax, kwargs) 
    2905  return ax 
    2906 

C:\Users\Sujoy\Anaconda3\lib\site-packages\seaborn\categorical.py in plot(self, ax, bar_kws) 
    1593  def plot(self, ax, bar_kws): 
    1594   """Make the plot.""" 
-> 1595   self.draw_bars(ax, bar_kws) 
    1596   self.annotate_axes(ax) 
    1597   if self.orient == "h": 

C:\Users\Sujoy\Anaconda3\lib\site-packages\seaborn\categorical.py in draw_bars(self, ax, kws) 
    1552   """Draw the bars onto `ax`.""" 
    1553   # Get the right matplotlib function depending on the orientation 
-> 1554   barfunc = ax.bar if self.orient == "v" else ax.barh 
    1555   barpos = np.arange(len(self.statistic)) 
    1556 

AttributeError: 'numpy.ndarray' object has no attribute 'barh' 
+1

ラインがないこれでは、インデックスに

sns.barplot(..., ax = axis.flatten()[i]) axis.flatten()[i].set_title(...) #etc. 

を平坦化配列を使用するか、単に軸アレイbeforehandsを平坦化することですエラーが発生しますか? –

+0

あなたのタイトルはあなたの実際のエラーとはまったく関係ありません。 – Evert

+0

あなたのコードに 'barh'はありません。あなたのコードのどこかにエラーが現れたり、matplotlibコードのどこかでエラーが発生したりします。完全なトレースバックを表示してください。 – Evert

答えて

3

それは、以下の2つの質問とその回答読み取るために役立つだろう:axisは2Dで、あなたのコードfig, axis = plt.subplots(5, 4,figsize=[25,10])

を数列。単一のインデックスを使用してインデックスを作成する場合は、1つの軸ではなく、1つの行を取り出します。あなたのコードのあまりを変えずに

は、最も簡単な解決策は、

fig, axis = plt.subplots(5, 4,figsize=[25,10]) 
axis = axis.flatten() 
# keep rest of code the same 
関連する問題