Plotly: Как изменить цветовую схему сюжетной диаграммы express? - PullRequest
2 голосов
/ 01 апреля 2020

Я пытаюсь работать с plotly, в частности ploty express, для создания нескольких визуализаций.

Одна из вещей, которые я строю, - это диаграмма рассеяния

У меня есть некоторый код ниже, который производит хороший график рассеяния:

import plotly.graph_objs as go, pandas as pd, plotly.express as px
df = pd.read_csv('iris.csv')
fig = px.scatter(df, x='sepal_length', y='sepal_width',
              color='species', marker_colorscale=px.colors.sequential.Viridis)
fig.show()

enter image description here

Однако я хочу попробовать изменить цветовую схему, т. Е. Цвета, представленные для каждого вида.

Я прочитал:

Но не удается изменить цвета.

Пытается:

fig = px.scatter(df, x='sepal_length', y='sepal_width',
              color='species', marker_colorscale=px.colors.sequential.Viridis)

Выход:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-78a9d58dce23> in <module>
      2 # https://plotly.com/python/line-and-scatter/
      3 fig = px.scatter(df, x='sepal_length', y='sepal_width',
----> 4               color='species', marker_colorscale=px.colors.sequential.Viridis)
      5 fig.show()

TypeError: scatter() got an unexpected keyword argument 'marker_colorscale'

Пытается

Пытается:

fig = px.scatter(df, x='sepal_length', y='sepal_width',
              color='species', continuous_colorscale=px.colors.sequential.Viridis)

Выход:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-6-78a9d58dce23> in <module>
      2 # https://plotly.com/python/line-and-scatter/
      3 fig = px.scatter(df, x='sepal_length', y='sepal_width',
----> 4               color='species', continuous_colorscale=px.colors.sequential.Viridis)
      5 fig.show()

TypeError: scatter() got an unexpected keyword argument 'continuous_colorscale'

Как я могу изменить цвета, используемые в plotly визуализации?

Ответы [ 2 ]

2 голосов
/ 01 апреля 2020

Как правило, изменение цветовой схемы для сюжетной фигуры express очень просто. Проблема здесь в том, что species является категориальной переменной . Непрерывные или числовые значения на самом деле проще, но мы вернемся к этому чуть позже.

Для категориальных значений использование color_discrete_map - совершенно правильный, хотя и громоздкий подход. Я предпочитаю использовать ключевое слово аргумент continuous_colorscale в сочетании с px.colors.qualitative.Antique, где Antique можно изменить на любую из дискретных цветовых схем , доступных в сюжете express. Просто запустите dir(px.colors.qualitative), чтобы увидеть, что вам доступно в графической версии, которую вы используете:

['Alphabet',
 'Antique',
 'Bold',
 'D3',
 'Dark2',
 'Dark24',
 'G10',......]

Код 1:

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length",
                 color="species", color_discrete_sequence=px.colors.qualitative.Antique)

fig.show()

Сюжет 1:

enter image description here

Так что насчет непрерывных переменных?

Рассмотрим следующий фрагмент:

import plotly.express as px
df = px.data.iris()
fig = px.scatter(df, x="sepal_width", y="sepal_length",
                 color="sepal_length", color_continuous_scale=px.colors.sequential.Viridis)

fig.show()

Запуск этого приведет к получению этого графика:

enter image description here

Вы можете изменить цвета на любой другая тема доступна под dir(px.colors.sequential), например color_continuous_scale=px.colors.sequential.Inferno, и получите этот сюжет:

enter image description here

Что может вызвать здесь путаницу, это настройка color='species, и сохранение color_continuous_scale=px.colors.sequential.Inferno даст вам этот график:

enter image description here

Фигура теперь возвращается прямо к использованию графиков по умолчанию, без с предупреждением о том, что color_continuous_scale=px.colors.sequential.Inferno не имеет эффекта. Это связано с тем, что species является категориальной переменной со следующими значениями: ['setosa', 'versicolor', 'virginica'], поэтому color_continuous_scale просто игнорируется. Чтобы color_continuous_scale вступил в силу, вам нужно использовать числовое значение, например sepal_length = [5.1, 4.9, 4.7, 4.6, 5. , 5.4, ...]

. И это возвращает нас к моему первоначальному ответу для категориальных значений:

Используйте ключевое слово аргумент continuous_colorscale в сочетании с px.colors.qualitative

0 голосов
/ 01 апреля 2020

Вы можете использовать метод с именем color_discrete_map, который является указанием пары k,v, где k - это значение цвета, а v - схема цветов. Например:

fig = px.scatter(df, x='sepal_length', y='sepal_width',
              color='species', color_discrete_map={'setosa': 'lightcyan', 
                                                   'versicolor': 'royalblue', 'virginica': 'darkblue'})

enter image description here

...