如何通过plotly和python使用色阶调色板?

时间:2018-09-30 13:55:28

标签: python pandas colors plotly

我正在尝试更改我在python中使用plotly和袖扣绘制的堆栈条形图的颜色(袖扣库允许直接将图表绘制成一个非常有用的数据框)。

让我们看下图(我使用jupyter笔记本):

import plotly.plotly as py
import cufflinks as cf

cf.set_config_file(offline=True, world_readable=True, theme='white')

df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
df.iplot(kind='bar', barmode='stack')

如何使用上述代码实现新的调色板?我想使用“ Viridis”调色板。我还没有找到一种方法来修改图形的颜色或使用调色板自动为条形图的不同堆栈进行不同的着色。你们中的一个知道怎么做吗?

非常感谢您的帮助,

3 个答案:

答案 0 :(得分:4)

trace0 = go.Scatter(
    x = foo,
    y = bar,
    name = 'baz',
    line = dict(
        color = ('rgb(6, 12, 24)'),
        width = 4)
)

这允许您更改线条的颜色或可以使用

colors = `['rgb(67,67,67)', 'rgb(115,115,115)', 'rgb(49,130,189)', 'rgb(189,189,189)']`

用于图形的单独线条。要使用指定的颜色渐变,请尝试

data = [
    go.Scatter(
        y=[1, 1, 1, 1, 1],
        marker=dict(
            size=12,
            cmax=4,
            cmin=0,
            color=[0, 1, 2, 3, 4],
            colorbar=dict(
                title='Colorbar'
            ),
            colorscale='Viridis'
        ),
        mode='markers')
]

答案 1 :(得分:1)

以@Peslier53 的答案为基础: 您可以直接在 df.iplot() 中指定颜色或色阶:

import plotly.plotly as py
import cufflinks as cf
from bokeh.palettes import viridis

cf.set_config_file(offline=True, world_readable=True, theme='white')
colors = viridis(4)
df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
df.iplot(kind='bar', barmode='stack', colors = colors)

这为您节省了一些代码行并使绘图非常方便。 它还适用于任何颜色列表(取决于图表类型,例如热图需要颜色渐变而不是颜色列表),因此您也可以使用自定义颜色。

答案 2 :(得分:0)

找到了我的问题的答案:

import plotly.plotly as py
import cufflinks as cf
from bokeh.palettes import viridis

cf.set_config_file(offline=True, world_readable=True, theme='white')
colors = viridis(4)
df = pd.DataFrame(np.random.rand(10, 4), columns=['A', 'B', 'C', 'D'])
fig = df.iplot(kind='bar', barmode='stack',asFigure = True)

for i,color in enumerate(colors):
    fig['data'][i]['marker'].update({'color': color})
    fig['data'][i]['marker']['line'].update({'color': color})

py.offline.iplot(fig)