66500


seaborn のversion0.10.0を使用しております。

seaborn scatterplotにおいて、凡例(hue)に数値のものをいれるとプロット色が濃淡になってしまいます。  
やりたいこととしては出力図の凡例をカラフルな色にしたいと考えております。  
通常はカラフルになるのですが、凡例対象が数値であるため濃淡なものになってしまいます。

図にしたいデータ  
[![dataframe](https://i.stack.imgur.com/2sf0E.png)](https://i.stack.imgur.com/2sf0E.png)  
現在の出力図

[code]

    sns.scatterplot(x="latitude", y="longitude",data=cluster_df,hue='place_cluster')
    
[/code]

[![現在の出力図](https://i.stack.imgur.com/L7eAJ.png)](https://i.stack.imgur.com/L7eAJ.png)

このような凡例のようにカラフルに変更したいです。  
[![出力イメージ凡例](https://i.stack.imgur.com/M7DKy.png)](https://i.stack.imgur.com/M7DKy.png)


CC BY-SA 4.0
2020-05-10T14:19:51.240
66493
2020-05-11T05:19:07.110
29536
question
python pandas
seaborn scatterplotにおいて、凡例(hue)に数値のものをいれるとプロット色が濃淡になってしまう


この記事を参考に、こんな感じで出来ました。  
[How To Specify Colors to Scatter Plots in
Python?](https://cmdlinetips.com/2019/04/how-to-specify-colors-to-scatter-
plots-in-python/)

各値用の色指定を辞書で作って、`palette`パラメータに指定することで出来ます。

[code]

    import pandas as pd
    import matplotlib.pyplot as plt
    import seaborn as sns
    cdf = pd.read_csv('st0422_8.csv',header=0)
    
    color_dict = dict({0:'blue',
                       1:'orange',
                       2:'green',
                       3:'red',
                       4:'purple',
                       5:'brown',
                       6:'pink',
                       7:'olive'
                      })
    
    sns.scatterplot(x="longitude", y="latitude", data=cdf, palette=color_dict, hue='place_cluster')
    plt.show()
    
[/code]

こちらがデータです。

[code]

    city,place_cluster,latitude,longitude
    所沢市,7,35.799672,139.46861
    さいたま市,7,35.861651,139.645435
    川口市,6,35.807738,139.724171
    越谷市,6,35.891084,139.790938
    川越市,5,35.925101,139.485793
    入間市,5,35.835766,139.391058
    草加市,5,35.825355,139.805402
    春日部市,5,35.975198,139.752301
    狭山市,5,35.852942,139.412213
    戸田市,5,35.817616,139.677892
    和光市,4,35.781208,139.605793
    志木市,4,35.83675,139.580319
    新座市,4,35.793511,139.565369
    熊谷市,4,36.14731,139.388645
    八潮市,4,35.822536,139.839175
    ふじみ野市,4,35.879538,139.519764
    朝霞市,3,35.797252,139.593916
    富士見市,3,35.856759,139.549074
    三郷市,3,35.830149,139.872275
    鶴ヶ島市,3,35.934515,139.393098
    深谷市,3,36.197444,139.281464
    飯能市,3,35.855731,139.327734
    上尾市,3,35.977381,139.593206
    加須市,2,36.131438,139.601719
    蓮田市,2,35.994307,139.662106
    白岡市,2,36.019026,139.676925
    三芳町,2,35.828367,139.526432
    久喜市,2,36.061995,139.666838
    伊奈町,2,36.000112,139.624185
    毛呂山町,2,35.941501,139.316067
    ときがわ町,2,36.00862,139.296844
    秩父市,1,35.992055,139.084817
    本庄市,1,36.243568,139.190393
    羽生市,1,36.172626,139.548465
    桶川市,1,36.005779,139.542531
    幸手市,1,36.078072,139.725861
    日高市,1,35.907796,139.339026
    川島町,1,35.982014,139.481518
    吉見町,1,36.039853,139.453728
    宮代町,1,36.022682,139.722885
    杉戸町,1,36.025765,139.736709
    蕨市,1,35.825634,139.679708
    美里町,1,36.177104,139.18141
    神川町,1,36.213876,139.101776
    上里町,1,36.251607,139.144826
    行田市,0,36.138949,139.455643
    東松山市,0,36.042126,139.399959
    鴻巣市,0,36.065758,139.522169
    北本市,0,36.026768,139.530211
    坂戸市,0,35.95717,139.402905
    吉川市,0,35.891152,139.841375
    越生町,0,35.964478,139.294199
    滑川町,0,36.065987,139.360917
    嵐山町,0,36.056655,139.320542
    小川町,0,36.056697,139.261845
    鳩山町,0,35.981466,139.334101
    横瀬町,0,35.987284,139.100046
    皆野町,0,36.07084,139.098754
    長瀞町,0,36.114803,139.109717
    小鹿野町,0,36.017129,139.008574
    東秩父村,0,36.058153,139.194607
    寄居町,0,36.118348,139.193012
    松伏町,0,35.925774,139.815178
    
[/code]

そしてこれが表示結果です。  
[![seaborn_hue色指定](https://i.stack.imgur.com/czDKZ.png)](https://i.stack.imgur.com/czDKZ.png)


CC BY-SA 4.0
2020-05-10T16:15:01.923
66494
2020-05-10T16:23:21.087
2020-05-10T16:23:21.087
26370
26370
66493
answer


hue
に数値型のデータを指定したことにより、paletteとしてシーケンシャルデータ用のカラーパレットが設定されたのかと思われますので、元通りのカラフルな色でプロットしたいのであれば、カテゴリー用のカラーパレットを明示的に指定するだけで良いのではないでしょうか。

<https://seaborn.pydata.org/tutorial/color_palettes.html>

[code]

    sns.scatterplot(x="latitude", y="longitude",data=cluster_df,hue='place_cluster', palette='bright')
    
[/code]


CC BY-SA 4.0
2020-05-11T05:19:07.110
66500
2020-05-11T05:19:07.110
24801
66493
answer