如何使用 Plotly 创建具有 n 个颜色的离散颜色图

Posted

技术标签:

【中文标题】如何使用 Plotly 创建具有 n 个颜色的离散颜色图【英文标题】:How to create discrete colormap with n colors using Plotly 【发布时间】:2021-09-05 22:10:03 【问题描述】:

我想创建一个带有 n 种颜色的颜色图,用于 Python 中的绘图表达图,它应该从一种颜色淡入另一种颜色。 所有默认颜色图只有 10 个离散值,但我正在寻找具有 n > 10 个离散值的颜色图。

>>> px.colors.sequential.Plasma_r

['#f0f921',
 '#fdca26',
 '#fb9f3a',
 '#ed7953',
 '#d8576b',
 '#bd3786',
 '#9c179e',
 '#7201a8',
 '#46039f',
 '#0d0887']

有没有办法将一个连续的地图分割成 n 个部分?

【问题讨论】:

对于默认的颜色图名称,您可以使用切片指定 10 种颜色或更少。例如px.colors.sequential.Plasma_r[:5] 但我对10多种颜色感兴趣。 如果你仔细看,是十多个。在这种情况下,您可以使用color_dicreate_map() 指定超过 10 种颜色。另一种方法是使用 seaborn 的调色板来指定所需的颜色数量。 colors=set_palette("Reds", 24) Here 是对 color_dicreate_map() 的解释。 但如果我是对的,你必须在使用 color_discrete_map 时手动定义颜色,这不是选项。 【参考方案1】:

如果您不介意rgb 颜色,那么n_colors 是一种方法。以下是'rgb(0, 0, 0)''rgb(255, 255, 255)' 之间灰度的 15 种颜色的示例:

 n_colors('rgb(0, 0, 0)', 'rgb(255, 255, 255)', 15, colortype='rgb')

下面是蓝色 'rgb(0, 0, 255)'和红色 'rgb(255, 0, 0)' 之间的 25 种颜色的示例:

n_colors('rgb(0, 0, 255)', 'rgb(255, 0, 0)', 25, colortype = 'rgb')

完整代码:

import numpy as np
import pandas as pd
import plotly.graph_objects as go
import plotly.express as px
import datetime
from plotly.colors import n_colors

pd.set_option('display.max_rows', None)
pd.options.plotting.backend = "plotly"


# greys15 = n_colors('rgb(0, 0, 0)', 'rgb(255, 255, 255)', 15, colortype='rgb')
redVSblue = n_colors('rgb(0, 0, 255)', 'rgb(255, 0, 0)', 25, colortype = 'rgb')

fig = go.Figure()

# for i, c in enumerate(greys15):
for i, c in enumerate(redVSblue):
    fig.add_bar(x=[i], y = [i+1], marker_color = c, showlegend = False)
f = fig.full_figure_for_development(warn=False)
fig.show()

【讨论】:

如果您正在寻找一个规模,这是一个很好的解决方案。但是,如果您想要例如 25 种颜色用于图形中的线条呢?如果能够尽可能地区分,那就太好了。使用内置颜色模式也很好,例如连续的“彩虹”。【参考方案2】:

类似于接受的响应,但能够使用可在this tutorial 中找到的内置名称

colors 包含可被视为listn_colors 列表。

import plotly.express as px

n_colors = 25
colors = px.colors.sample_colorscale("turbo", [n/(n_colors -1) for n in range(n_colors)])

这里是完整的例子:

import plotly.graph_objects as go
import plotly.express as px

n_colors = 25
colors = px.colors.sample_colorscale("turbo", [n/(n_colors -1) for n in range(n_colors)])

fig = go.Figure()

# for i, c in enumerate(greys15):
for i, c in enumerate(colors):
    fig.add_bar(x=[i], y = [15], marker_color = c, showlegend = False, name=c)
f = fig.full_figure_for_development(warn=False)
fig.show()

【讨论】:

以上是关于如何使用 Plotly 创建具有 n 个颜色的离散颜色图的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何在 Plotly 中绘制具有渐变颜色的矩形?

Plotly:如何为使用多条轨迹创建的图形设置调色板?

Plotly:如何获取跟踪颜色属性以绘制具有相同颜色的选定标记?

有没有办法调整使用 Plotly 创建的离散 choropleth 的图例项的大小?

Plotly 在 Python 中不尊重颜色字典

Matplotlib 颜色条未显示 2 个离散值的标签