如何编辑配色方案?
How to edit a color scheme?
我正在为 Python 使用 Altair,我当前的热图代码使用的是 redyellowblue 配色方案 (A),该配色方案使用黄色作为中间色。我正在尝试编辑此配色方案以实现 (B) 上的方案,唯一的区别是将黄色替换为白色作为中间色。有人知道如何在 Altair 中实现吗?
(B) 的配色方案是在 R 中创建的,方法是使用 RdYlBu color pallete(具有 11 种颜色的那个)并用白色覆盖中间(第 6 种颜色)。然后,他们将调色板中的颜色数量增加到 99,使褪色效果看起来更流畅。
我当前的代码(A):
color=alt.Color('Spline_WW_Diff_Trend:Q', scale=alt.Scale(scheme='redyellowblue',reverse=True, domain=[-3.57,2.270], domainMid=0, clamp=True), legend=alt.Legend(title="Trend"))
我曾尝试使用范围手动设置颜色,但得到了一个奇怪的结果。我还使用了一个条件来覆盖值 0 的颜色,但它并不令人满意,因为与 0 相邻的数字应该是白色的。
您在定义自己的 range
时可能需要 interpolate='rgb'
。使用 interpolate
属性 作为色标,您可以定义其中一种插值方法通过 d3 插值,https://github.com/d3/d3-interpolate#color-spaces.
插值的默认值为 hcl
,这并不总是您想要的。用固定的 range/domain:
更改插值方法后,观察颜色插值的变化
import altair as alt
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': np.arange(-10, 10)})
def charter(method):
return alt.Chart(df, title=method).mark_rect().encode(
x=alt.X('x:O',title=None),
color=alt.Color('x:Q',
scale=alt.Scale(
domain=[-10,-5,0,5,9],
range=['red','orange','white','lightblue','darkblue'],
interpolate=method
),
legend=alt.Legend(direction='horizontal', orient='top', title=None)
)
)
methods = ['hcl', 'rgb', 'hsl', 'hsl-long', 'lab', 'hcl-long', 'cubehelix', 'cubehelix-long']
alt.vconcat(*[charter(method) for method in methods]).resolve_scale(color='independent')
我正在为 Python 使用 Altair,我当前的热图代码使用的是 redyellowblue 配色方案 (A),该配色方案使用黄色作为中间色。我正在尝试编辑此配色方案以实现 (B) 上的方案,唯一的区别是将黄色替换为白色作为中间色。有人知道如何在 Altair 中实现吗?
(B) 的配色方案是在 R 中创建的,方法是使用 RdYlBu color pallete(具有 11 种颜色的那个)并用白色覆盖中间(第 6 种颜色)。然后,他们将调色板中的颜色数量增加到 99,使褪色效果看起来更流畅。
我当前的代码(A):
color=alt.Color('Spline_WW_Diff_Trend:Q', scale=alt.Scale(scheme='redyellowblue',reverse=True, domain=[-3.57,2.270], domainMid=0, clamp=True), legend=alt.Legend(title="Trend"))
我曾尝试使用范围手动设置颜色,但得到了一个奇怪的结果。我还使用了一个条件来覆盖值 0 的颜色,但它并不令人满意,因为与 0 相邻的数字应该是白色的。
您在定义自己的 range
时可能需要 interpolate='rgb'
。使用 interpolate
属性 作为色标,您可以定义其中一种插值方法通过 d3 插值,https://github.com/d3/d3-interpolate#color-spaces.
插值的默认值为 hcl
,这并不总是您想要的。用固定的 range/domain:
import altair as alt
import pandas as pd
import numpy as np
df = pd.DataFrame({'x': np.arange(-10, 10)})
def charter(method):
return alt.Chart(df, title=method).mark_rect().encode(
x=alt.X('x:O',title=None),
color=alt.Color('x:Q',
scale=alt.Scale(
domain=[-10,-5,0,5,9],
range=['red','orange','white','lightblue','darkblue'],
interpolate=method
),
legend=alt.Legend(direction='horizontal', orient='top', title=None)
)
)
methods = ['hcl', 'rgb', 'hsl', 'hsl-long', 'lab', 'hcl-long', 'cubehelix', 'cubehelix-long']
alt.vconcat(*[charter(method) for method in methods]).resolve_scale(color='independent')