如何使用 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
包含可被视为list
的n_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:如何获取跟踪颜色属性以绘制具有相同颜色的选定标记?