Plotly:如何更改绘图表达散点图的配色方案?

Jer*_* M. 10 python visualization data-visualization plotly

我正在尝试与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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

但是,我想尝试更改配色方案,即为每个物种呈现的颜色。

我读过了:

但是不能让颜色改变。

试:

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

产量:

---------------------------------------------------------------------------
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'
Run Code Online (Sandbox Code Playgroud)

试:

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

产量:

---------------------------------------------------------------------------
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'
Run Code Online (Sandbox Code Playgroud)

如何更改plotly可视化中使用的颜色?

ves*_*and 13

通常,更改绘图表达图形的配色方案非常简单。导致这里出现问题的原因是它species是一个分类变量。连续值或数值实际上更容易,但我们稍后会谈到。

对于分类值, usingcolor_discrete_map是一种完全有效但很麻烦的方法。我更喜欢将关键字参数continuous_colorscale与 结合使用px.colors.qualitative.Antique,其中Antique可以更改为plotly express 中可用的任何离散配色方案。只需运行dir(px.colors.qualitative)以查看您正在运行的 plotly 版本中可用的内容:

['Alphabet',
 'Antique',
 'Bold',
 'D3',
 'Dark2',
 'Dark24',
 'G10',......]
Run Code Online (Sandbox Code Playgroud)

代码 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()
Run Code Online (Sandbox Code Playgroud)

情节 1:

在此处输入图片说明

那么连续变量呢?

考虑以下片段:

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()
Run Code Online (Sandbox Code Playgroud)

运行它会产生这个图:

在此处输入图片说明

您可以更改颜色以其他任何主题下可用dir(px.colors.sequential),例如color_continuous_scale=px.colors.sequential.Inferno,并获得该地块:

在此处输入图片说明

这里可能会引起混淆的是,设置color='species和保持color_continuous_scale=px.colors.sequential.Inferno会给你这个情节:

在此处输入图片说明

该图现在直接跳回使用默认的绘图颜色,而不会给您任何关于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


Jer*_* M. 8

您可以使用称为 的方法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'})
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明