Как отобразить все числовые значения условных обозначений в seaborn?

#python #data-visualization #data-science #seaborn #line-plot

#python #визуализация данных #наука о данных #seaborn #линейный график

Вопрос:

Я пытаюсь создать sns.lineplot() для следующего фрейма данных:

 overs:

    season  over    total_runs  total_overs avg_run
0   2008    1            703       745     0.943624
1   2008    2            923       741     1.245614
2   2008    3            826       727     1.136176
3   2008    4            912       725     1.257931
4   2008    5            1017      722     1.408587
235 2019    16           1099      721     1.524272
236 2019    17           1035      707     1.463932
237 2019    18           1124      695     1.617266
238 2019    19           1209      669     1.807175
239 2019    20           1189      552     2.153986
240 rows × 5 columns

sns.lineplot(x='avg_run', y='over', hue='season', data='overs')
  

Я получаю следующий результат:

Вывод

  • Я не получаю легенды за весь сезон (в диапазоне: 2008-2019), и я не могу отличить текущие lineplots .
  • Пожалуйста, обратите внимание: мое требование — отобразить все строки на одном рисунке

Ответ №1:

  • Попробуйте использовать legend='full' параметр для seaborn.lineplot()
    • Это может быть необходимо, когда значения условных обозначений являются числовыми.
  • На выбор предлагаются разные цветовые палитры.
 import pandas as pd
import numpy as np
import seaborn as sns

# test data
sample_length = range(1, 6 1)
rads = np.arange(0, 2*np.pi, 0.01)
data = np.array([np.sin(t*rads) for t in sample_length])
df = pd.DataFrame(data.T, index=pd.Series(rads.tolist(), name='radians'), columns=sample_length)

dfl = df.stack().reset_index().rename(columns={'level_1': 'frequency', 0: 'amplitude'})

# plot
sns.lineplot(x='radians', y='amplitude', hue='frequency', data=dfl, legend='full', palette='winter')
  

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

пользовательская цветовая карта

  • Выберите палитру с достаточным количеством уникальных цветов для количества линий на графике.
  • Дополнительные опции для husl палитры можно найти на seaborn.husl_palette
  • colors также может быть список выбранных вручную цветов
    • colors = ['red', 'blue', 'green', 'black', 'purple', 'yellow']
 # create color mapping based on all unique values of frequency
freqs = dfl.frequency.unique()
colors = sns.color_palette('husl', n_colors=len(freqs))  # get a number of colors
cmap = dict(zip(freqs, colors))  # zip freqs to colors and create a dict

sns.lineplot(x='radians', y='amplitude', hue='frequency', data=dfl, legend='full', palette=cmap)
  

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

1. @PratyushSaxena Отлично! Я рад, что это решило ваш вопрос.

2. Мне нужна еще немного помощи. Я пытаюсь разделить условные обозначения на 2 столбца. Но название легенды (сезон) меняется вместе с ней. Могу ли я исправить заголовок в центре, разделив значение условных обозначений на 2 столбца?? Спасибо…

3. @PratyushSaxena единственный способ, который я вижу для создания нескольких столбцов, — это с plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', ncol=2) . Если это не решит проблему, я бы открыл отдельный вопрос. Я мало занимался настройкой условных обозначений. loc и anchor могут принимать другие значения. Легенда