Plotly:如何使用 Python 对绘图对象条形图进行颜色编码?

Abh*_*mar 1 python plotly

def update_graph_bar(named_count,**kwargs):

traces = list()
df = pd.DataFrame(list(Message.objects.all().values()))
available_indicators = list(df['content'].unique())
for t in available_indicators:
    traces.append(go.Bar(
        x=[t],
        y=[df[df['content']==t]['timestamp'].count()],
        name='{}'.format(t),text=[df[df['content']==t]['timestamp'].count()],
        textposition='auto'
        ))
layout = plotly.graph_objs.Layout(barmode='group',paper_bgcolor='#00FFFF',
    plot_bgcolor='rgba(0,0,0,0)',)
return {'data': traces,
      'layout': layout}
Run Code Online (Sandbox Code Playgroud)

我有上面的代码,在这里我想使用“标记”引入颜色编码,这样条形图的颜色应该取决于它的值。随着值的增加,颜色也会改变。

ves*_*and 19

我假设你正在寻找这样的东西:

图 1:用图表达和

在此输入图像描述

可以很容易地这样生产:

import plotly.express as px
data = px.data.gapminder()

data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',
             hover_data=['lifeExp', 'gdpPercap'], color='lifeExp',
             labels={'pop':'population of Canada'}, height=400)
fig.show()
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将这种方法应用于plotly.graph_objects 以获得:

图 2: go.Bar()'viridis'

在此输入图像描述

代码2:

import plotly.graph_objects as go

fig = go.Figure()

x=[1,2,3]
y=[4,5,6]
z=[12,24,48]

fig.add_trace(go.Bar(x=x, y=y,
                     marker=dict(color = z,
                     colorscale='viridis')))

fig.show()
Run Code Online (Sandbox Code Playgroud)

您甚至可以应用自己的自定义色标:

图 3:自定义颜色

在此输入图像描述

代码3:

import plotly.graph_objects as go

fig = go.Figure()

x=[1,2,3]
y=[4,5,6]
z=[12,24,48]

customscale=[[0, "rgb(255, 0, 0)"],
            [0.1, "rgb(255, 0, 0)"],
            [0.9, "rgb(0, 0, 255)"],
            [1.0, "rgb(0, 0, 255)"]]

fig.add_trace(go.Bar(x=x, y=y,
                     marker=dict(color = z,
                     colorscale=customscale)))

fig.show()
Run Code Online (Sandbox Code Playgroud)

code 3将颜色映射到变量的相对大小时,code 4将向您展示如何将颜色映射到具有指定阈值的绝对值:

图 4:由变量的绝对值分配的颜色

在此输入图像描述

代码4:

import plotly.graph_objects as go

fig = go.Figure()

x=[1,2,3]
y=[25,75, 110]
z=[12,24,48]

def SetColor(y):
        if(y >= 100):
            return "red"
        elif(y >= 50):
            return "yellow"
        elif(y >= 0):
            return "green"

fig.add_trace(go.Bar(x=x, y=y,
                     marker=dict(color = list(map(SetColor, y)))))

fig.show()
Run Code Online (Sandbox Code Playgroud)