2016-12-16 16 views
1

私はいくつかの仮説的な学生テストの得点をプロットしようとしています。私はy軸に学生のラストネームを持ち、x軸にテストスコア(水平バープロット)を持っていたいと思います。学生の名前はユニークではないので、にy軸に重複を許可したいと思います。シーボーンやパンダで重複データを取り除く方法は見てきましたが、保存方法は見当たりませんでした。ここで私が持っているコードです:Seaborn barplotを使用して重複したカテゴリデータを分離して保持しますか?

import seaborn as sns 
import pandas as pd 
import matplotlib as mpl 
import matplotlib.pyplot as plt 

sns.set(style="whitegrid") 

scores = pd.read_csv('input_file.csv', sep=',').sort_values("score", ascending=True) 
sns.set_color_codes("pastel") 
sns.barplot(x="score", y="lastName", data=scores, color="b", ci=None) 
plt.title('Scores') 
sns.despine(left=True, bottom=True) 
plt.savefig('path_to_file.pdf') 

私はA、確かに、多分私はfactorplotを使用して「H」への方向を設定する必要があることを考えて、「バー」に入力するが、それは「きついレイアウト」の警告を生成し、タイト/ひどくレンダリングされたプロット。

FYI、現在私は十分によく見えるバープロットを持っていますが、ユニークでないラストネームをグループ化してテストスコアを合計します。それは私が修正しようとしているものです。

+0

あなたは、重複する姓のための2つのバーを表示しようとしていますか? –

+1

サンプルデータを投稿した場合に役立ちます。 [mcve]の作成方法をお読みください。あなたのコードと説明と一致するサンプルデータを作成しようとする可能性がありますが、それは実際に問題を解決するために費やす時間がかかり、あなたを誤解して役に立たない答えを書くことができます。 – Goyo

答えて

3

(インデックスをy座標として使用して)各一意の行に棒グラフをプロットし、手動でy軸目盛りラベルを割り当てることができます。この作業のために、Seabornは実際にやり過ぎかもしれないと

df = pd.DataFrame({ 
    'name': ['A', 'B', 'A', 'B'], 
    'score': [10, 20, 30, 40], 
}) 

ax = sns.barplot(x=df.score, y=df.index, orient='h') 
ax.set_yticklabels(df.name) 

sns.barplot


注意。あなたは統計的な視覚化を行っていません。一意でない値をグループ化して信頼区間を表示する必要がないので、matplotlib.pyplot.barhで十分です(見栄えの良いプロットではimport seaborn)。

plt.barh(df.index, df.score, align='center') 
plt.yticks(df.index, df.name) 
plt.gca().invert_yaxis() 

matplotlib.pyplot.barh

+0

これを少し悪化させようとしていました。よくやった。 –

+0

ねえ、@Igor、これは潜在的に素晴らしい解決策のようです。大規模なCSVファイルを読み込んでスコアを昇順に並べ替えるのに問題はありますか? –

+0

@Janine、データの読み込み/ソートとそれをプロットすることは、2つの直交する作業です。これらの方法のいずれかを使用して、任意の順序でデータをプロットすることができます。 –

関連する問題