Plotly 条形图 - 根据正负值改变颜色 - Python

9
我有以下代码绘制了一个条形图(1个系列),但如果“Net”值为正,我需要把条形颜色设置成蓝色,如果是负数则设置为红色:
import pandas as pd
import plotly.graph_objects as go

df = pd.DataFrame({
     'Net':[15,20,-10,-15], 
     'Date':['07/14/2020','07/15/2020','07/16/2020','07/17/2020']
})

df['Date'] = pd.to_datetime(df['Date'])
fig = go.Figure(data=[go.Bar(name='Net', x=df['Date'], y=df['Net'])])
fig.update_layout(barmode='stack')
fig.show()

你介意提供一个完整的 mcve 吗? - rpanai
我认为你可以在这里使用 蜡烛图。你最终可以使用文档中的自定义颜色。 - rpanai
2个回答

17

你可以在这里查看文档。完整的代码如下:

import pandas as pd
import plotly.graph_objects as go
import numpy as np

# Data

df = pd.DataFrame({
     'Net':[15,20,-10,-15], 
     'Date':['07/14/2020','07/15/2020','07/16/2020','07/17/2020']
})

df['Date'] = pd.to_datetime(df['Date'])

## here I'm adding a column with colors
df["Color"] = np.where(df["Net"]<0, 'red', 'green')

# Plot
fig = go.Figure()
fig.add_trace(
    go.Bar(name='Net',
           x=df['Date'],
           y=df['Net'],
           marker_color=df['Color']))
fig.update_layout(barmode='stack')
fig.show()

输入图像描述


2
这个方法非常出色,你应该给自己更多的信心:我不会从文档中提取出这个方法。np.where() 映射方法很棒。 - alphazwest

3

@rpanai的回答很棒,让我找到了需要的内容。如果使用plotly.express,我想简单地添加一种方法来实现相同的效果。

请注意,大部分内容与上面的内容是相同的

import pandas as pd
import numpy as np
import plotly.express as px

df = pd.DataFrame({
       'Net':[15,20,-10,-15],
       'Date':['07/14/2020','07/15/2020','07/16/2020','07/17/2020']
})
df['Date'] = pd.to_datetime(df['Date'])
df["Color"] = np.where(df["Net"]<0, 'red', 'green')

# PLOT
fig = px.bar(df,x="Date",y="Net")

# COLOR
fig.update_traces(marker_color=df["Color"])

fig.show()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接