77487


下記のコードを書いてみました

[code]

    import matplotlib.pyplot as plt
    import matplotlib.ticker as ticker
    import pandas as pd
    import seaborn as sns
    
    df = pd.DataFrame(
        {
            'value': [
                5060,5000, 4400, 4001,2500, 1100, 1000, 900, 800,
                500,453,392,380,296,207,160,130,100,41,40,32,31,26,25,15,10,9,7
            ]
        }
    )
    
    ax = sns.histplot(df["value"], kde=False)
    ax.yaxis.set_major_locator(ticker.MultipleLocator(1))
    plt.show()
    
[/code]

結果:  
[![画像の説明をここに入力](https://i.stack.imgur.com/yW96O.png)](https://i.stack.imgur.com/yW96O.png)

横軸である階級の`1000`や`4000`, `5000`あたりに描画されたグラフが、キリの良い数字からはみ出ています。

[Pythonのseabornで手軽なのに美しいヒストグラムを作成する方法 | たぬハック](https://tanuhack.com/seaborn-
histgram/)  
や  
[matplotlibやseabornのヒストグラムでビン幅をサクッとキレイに整える](https://qiita.com/matyubara/items/4137acf9cfbdc1dcbab7)

を参考に `bins`
を設定すればいいのかと思ったのですが、`bins`は、何等分するのかという考え方のようで、`500`ごとに分割するという考え方とは違うようです。特定数値ごとに分割するという書き方がわからないので、やみくもに`10`や`11`をあたえるといい感じにきりのよい500で区切ってくれるかと思いましたが、そんなことはありませんでした。特定数値ごとに分割するということはできないのでしょうか？


CC BY-SA 4.0
2021-06-11T09:51:24.323
77485
2021-06-11T12:28:46.360
9008
question
python pandas seaborn
ヒストグラムの階級を500区切りにしたい


`binwidth=`引数でbinの幅を指定できます。  
おそらくこちらがご希望に沿ったものでしょうか。  
幅を指定するだけでなく区切りの位置を500の倍数に確実に合わせたい場合は  
`binrange=`引数の指定を併用します。

[code]

    ax = sns.histplot(df["value"], kde=False, binwidth=500, binrange=(0,5500))
    
[/code]

また、`bins=`引数は区切りのリストも受け付けます。ですので

[code]

    ax = sns.histplot(df["value"], kde=False, bins=range(0,6000,500))
    
[/code]

みたいにしても500ずつ区切りにできます。


CC BY-SA 4.0
2021-06-11T10:39:54.070
77487
2021-06-11T12:28:46.360
2021-06-11T12:28:46.360
9464
9464
77485
answer