【问题标题】:Using plotly how can I fill different color for each group in rows of box-plot使用 plotly 如何在箱线图行中为每个组填充不同的颜色
【发布时间】:2022-08-03 00:38:03
【问题描述】:

我对python很陌生。我研究了一个箱形图,但发现很难为每个组填充不同的颜色。 我试图让所有人都有一个黑色的轮廓,但不能让他们用指定的颜色填充箱线图(如在我用来突出显示附加图像中的每一行的框架中。

好心的帮助

查看代码和结果:

df = pd.read_csv (path)

#colors = {\'Csi\':\'#DF9720\', \'Ph\':\'#138245\', \'Qc\':\'#A0D855\'}
colors = {\'Csi\':\'#000000\', \'Ph\':\'#000000\', \'Qc\':\'#000000\'}

fig = px.box(df, x=\"RD\", y=\"PRI\", facet_col=\'DARC\',facet_row=\'Species\', width= 800, height= 930, color=\'Species\', color_discrete_map = colors)
for data in fig.data:
    data[\"width\"] = 17 #Change this value for bar widths
    data[\'whiskerwidth\'] = 0.5
fig.update_traces(marker=dict(size=5),fillcolor=\'#A0D855\')

fig.update_layout(paper_bgcolor=\'white\',plot_bgcolor= \'white\',margin=dict(l=20, r=20, t=20, b=20),
    title=None,
    yaxis_range=[-0.2,0.05],
    font=dict(
        family=\"Arial\",
        size=15,
        color=\'black\',
    )
)

fig.update_xaxes(showline=True, linewidth=1.2, linecolor=\'black\', mirror = True, ticks=\'outside\', tickfont_size=16, tickfont_family=\'Arial\', tick0=0, dtick=25)
fig.update_yaxes(showline=True, linewidth=1.2, linecolor=\'black\', mirror = True, ticks=\'outside\', tickfont_size=16, tickfont_family=\'Arial\', tick0=-0.20, dtick=0.05)
fig.show()
  • 嗨@Gabriel-您能否提供一些足够的示例数据以便可以重新创建问题?另外,你到底在期待什么?您是否希望第一行所有框内的颜色为一种颜色,而第二行所有框内的颜色为不同颜色?请详细说明...
  • 谢谢,@Redox。我在这里附上了一个样本。是的,我希望第一行是一种颜色,而第二行中的所有颜色都是另一种颜色。虽然线条保持黑色。有关示例数据,请参阅下面的链接。 drive.google.com/file/d/1plBbgWB8UtP5dMgVH9NEswkQwJ29yH7C/…
  • 嗨@Gabirel - 据我所知,每行可以有不同的颜色,但框填充颜色将是边框颜色的较浅色调。您可以将所有行的填充颜色更改为相同,并保持边框颜色不同,但不能反过来。让我知道是否有帮助,我会添加答案
  • 嗨@Redox,感谢您的回复。仔细查看我的代码后,我能够找到解决方法。谢谢你。我在数据 for 循环中添加了一个黑色标记,然后调整了“fig.update_traces”行来为每个组分配填充颜色(行 - 我的数据中的物种)。

标签: python graph boxplot plotly-python


【解决方案1】:

这是给我最初问题答案的新代码。

import plotly.express as px
import pandas as pd
import plotly.graph_objects as go
import numpy as np
import statistics
from matplotlib import pyplot as plt
import plotly.io as pio

path = '/content/drive/MyDrive/Colab Notebooks/TK_forGraph.csv'

df = pd.read_csv (path)

fig = px.box(df, x="RD", y="PRI", facet_col='DARC',facet_col_spacing=0.045,facet_row='Species', width= 870, height= 910, color='Species', points='all')

for data in fig.data:
    data["width"] = 17 #Change this value for bar widths
    data['whiskerwidth'] = 0.5
    data['line']=dict(width=1,color='#5a5a5a')
    data['pointpos'] = 0
    data['marker']=dict(color='#000000', opacity=0.4, size = 8)

#To give specific colors to each group
fig.update_traces(fillcolor='#DF9720', selector=dict(name="Csi"))
fig.update_traces(fillcolor='#138245', selector=dict(name="Ph"))
fig.update_traces(fillcolor='#A0D855', selector=dict(name="Qc"))


fig.update_layout(paper_bgcolor='white',plot_bgcolor= 'white',margin=dict(l=20, r=20, t=20, b=20),
    title=None,
    yaxis_range=[-0.20,0.05],
    font=dict(
        family="Arial",
        size=15,
        color='black',
    )
)


fig.update_xaxes(showline=True, linewidth=1.2, linecolor='black', mirror = True, ticks='outside', tickfont_size=16, tickfont_family='Arial', tick0=0, dtick=25)
fig.update_yaxes(showline=True, linewidth=1.2, linecolor='black', mirror = True, ticks='outside', tickformat='.2f', tickfont_size=16, tickfont_family='Arial', tick0=-0.20, dtick=0.05)


fig.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多