как определить номер категории оттенка для числовой переменной?

#python #seaborn

Вопрос:

Я хотел бы определить количество категорий для оттенка для числовой переменной. Например, я использую столбцы глубины в качестве оттенка, значение столбца глубины колеблется в диапазоне 400-600. в приведенном ниже коде он выводит только 4 категории: 400, 450,500,600. Я хотел бы изменить количество категорий с 4 на 8, т. Е. с оттенком 400,425,450,475,500,525,550,575,600. Как это сделать? Спасибо

 sns.scatterplot(x=x,y=y,data=df,hue='depth')
 

Комментарии:

1. Я думаю, вам нужно использовать palette аргумент и предоставить ему либо диктант, либо экземпляр maplotlib Colormap . seaborn.pydata.org/generated/seaborn.scatterplot.html

2. Спасибо, Павел, я использовал палитру=»прохладно» вот так. Мне также нравится это: viridis = cm.get_cmap(‘viridis’, 12), палитра=virdis, и это все еще не работает, спасибо

Ответ №1:

Поэтому я был немного неуверен в вашем вопросе, особенно в той его части:

Например, я использую столбцы глубины в качестве оттенка, значение столбца глубины колеблется в диапазоне 400-600.

Вы имеете в виду непрерывный процесс? или дискретный? В любом случае, если предположить, что диапазон непрерывен, мы можем достичь того, чего вы хотите, с помощью процесса сортировки.

Я начну с создания образца ваших данных:

 import seaborn as sns
import pandas as pd
from random import randrange

df = pd.DataFrame()
for i in range(0,50):
    df = df.append({'x': randrange(1,10),
                    'y': randrange(10,21),
                    'depth':randrange(400,601)}, ignore_index=True)
df
 

Затем мы сгруппируем значения в глубину в соответствии с вашей спецификацией и используем их в качестве нового столбца для ввода в аргумент hue. Они не упоминают об этом в документе, но аргумент hue для точечной диаграммы требует одинакового количества строк для всех ненулевых строк в df.

 mybins = pd.IntervalIndex.from_tuples([(400, 425), 
                                       (425, 450), 
                                       (450, 475), 
                                       (475, 500), 
                                       (500, 525), 
                                       (525, 550), 
                                       (550, 575), 
                                       (575, 600)])
df['bins'] = pd.cut(df['depth'], bins = mybins)
df['bins'] = df['bins'].apply(lambda x: x.right)
df
 

Теперь давайте посмотрим на результаты:

оттенок с использованием глубины:

введите описание изображения здесь

оттенок с использованием бункеров:

введите описание изображения здесь

оттенок с использованием ячеек, но с градиентным оттенком

 sns.scatterplot(x='x',y='y',data=df, hue='bins', palette = "ch:s=.25,rot=-.25")
 

введите описание изображения здесь

Комментарии:

1. Большое вам спасибо, Геоф, это действительно работает. Я ценю вашу помощь. Это потрясающе!