2017-03-17 19 views
0

Pythonカーネルが死んでコードが実行されるたびにコードが正常に実行されました: コードに問題がありますか、問題が深刻ですか?他のノートを問題なく走らせることができます。アノテーション付き水平バープロット

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 
import seaborn as sns 
%matplotlib inline 
plt.rcParams['text.usetex'] = False 



df = pd.DataFrame(np.random.uniform(size=37)*100, columns=['A']) 

ax = plt.figure(figsize=(10,5)) 

plt.barh(df.index, df['A'], color='ForestGreen') 
plt.yticks(df.index) 


def annotateBars(row, ax=ax): 
    if row['A'] < 20: 
     color = 'black' 
     horalign = 'right' 
     horpad = 2 
    else: 
     color = 'white' 
     horalign = 'right' 
     horpad = -2 

    ax.text(row.name, row['A'] + horpad, "{:.1f}%".format(row['A']), 
     color=color, 
      horizontalalignment=horalign, 
      verticalalignment='center', 
      fontsize=10) 

junk = df.apply(annotateBars, ax=ax, axis=1) 
+0

エラーが発生した場合は表示されます。タスクマネージャを使用してプロセスを実行すると、コンピュータがプロセスを正常に処理していますか? – MattR

+0

コード実行時に同じ問題が発生しました。しかし、最初に関数を定義し、すべてをプロットする前にジャンク変数を代入すると、正常に動作します。 – schlump

+0

@schlumpこれは非常に奇妙なことですが、私は今このコードを実行することができました。私が最後に変更したのは、plt.barh()行にあるものだが、カーネルが枯渇した後に何が戻ってこないか分からないことを覚えている。 –

答えて

1

カーネルがどうして死んでも問題ではないので、質問のタイトルを変更する必要があります。私が理解している限り、問題は次のとおりです。

異なるバーの色と各バーの値を注釈として作成する水平棒グラフを作成します。ここで

がSeabornを使用してソリューションです:

import seaborn as sns 
import matplotlib.pyplot as plt 
import numpy as np 
import pandas 

sns.set(style="darkgrid") 
sns.set_color_codes("muted") 

# Create example DataFrame 
df = pandas.DataFrame(np.random.uniform(size=20)*100, columns=['A']) 

# Create list of colors based on a condition 
colors = ['red' if (x < 20) else 'green' for x in df['A']] 

# Create barplot 
ax = sns.barplot(data=df.transpose(), palette=colors, orient='h') 
# Annotate every single Bar with its value, based on it's width   
for p in ax.patches: 
    width = p.get_width() 
    plt.text(5+p.get_width(), p.get_y()+0.55*p.get_height(), 
      '{:1.2f}'.format(width), 
      ha='center', va='center') 

は作成します。

enter image description here

をアップデート:また、テキストを着色するため :

for p in ax.patches: 
    width = p.get_width() 
    if width < 20: 
     clr = 'red' 
    else: 
     clr = 'green' 
    plt.text(5+p.get_width(), p.get_y()+0.55*p.get_height(), 
      '{:1.2f}'.format(width),color=clr, 
      ha='center', va='center') 

プロットを大きくするので、背景は注釈もカバーしていますns:

ax.set_xlim([0, max(df['A'])+10]) 
+0

これは問題を解決しますが、もう一つ質問したいのですが、棒と同じ方法で注釈を塗りつぶす方法はありますか?私は単に 'color = colors'を追加しようとしましたが、単純ではありません。 –

+0

Yeha colorsは文字列のリストです。注釈を1つの値を渡す必要があるループ内に設定します。 – schlump

+0

どういう意味ですか? –

関連する問題