2017-10-16 16 views
1

シーボーンで可変幅x軸ビンを持つバープロットを作成しようとしています。このチャートと同様: enter image description here 私のx幅はすべて100%になりますが、Seaborn経由でこの目標を達成する方法の例を見つけることはできません。何か案は?シーボーン付き可変幅バープロット

+0

この目的のためにseabornバープロットを使用する理由はありません。代わりに 'pyplot.bar'を使用してください。 – ImportanceOfBeingErnest

答えて

1

ここにはおそらくいくつかの回答が考えられます。 seaborn barplotでは、 "width"(棒の幅の値)、 "left"(必須の引数であるx軸の位置の値)、および "align"のようないくつかのパラメータの組み合わせを使用することができます"

A非常に単純な例:「左」と

import seaborn as sns 

data = [7, 3, 15] 
widths = [1, 5, 3] 
left = [0, 1, 6] 
sns.plt.bar(left, data, width = widths, color=('orange','green','blue'), 
alpha = 0.6, align='edge', edgecolor = 'k', linewidth = 2) 

注(バーの位置)は、単にタッチと重ならないようにバーのために幅に対応すべきです。その後

enter image description here

+0

'sns.plt.bar'を使って、matplotlibs' plt.bar'関数を呼び出しています。これは海軍とは関係がありません。 – ImportanceOfBeingErnest

0

あなたがbarplotためSeabornを使用したい場合は、あなたがバーの長方形(パッチ)の幅を変更する必要があります(これはthis answerあたりとしてmatplotlibのオブジェクト指向のインタフェースを介して行われます):

import seaborn as sns 

iris = sns.load_dataset('iris') 
ax = sns.barplot('species', 'sepal_width', data=iris) 
widthbars = [0.3, 0.6, 1.2] 
for bar, newwidth in zip(ax.patches, widthbars): 
    x = bar.get_x() 
    width = bar.get_width() 
    centre = x + width/2. 
    bar.set_x(centre - newwidth/2.) 
    bar.set_width(newwidth) 

enter image description here

また、直接matplotlibのに似たbarplotを作成することができます。

import matplotlib.pyplot as plt 

widths = [0.3, 0.6, 1.2] 
for x_pos, (species_name, species_means) in enumerate(iris.groupby('species').mean().groupby('species')): 
    plt.bar(x_pos, species_means['sepal_width'], widths[x_pos]) 

enter image description here

関連する問題