Plotly Express Icicle 可视化中的自定义排序
Posted
技术标签:
【中文标题】Plotly Express Icicle 可视化中的自定义排序【英文标题】:Custom Sorting in Plotly Express Icicle Visualizations 【发布时间】:2021-11-22 09:51:25 【问题描述】:我正在处理一个具有季度任务的数据集,并且我试图通过一个快速表达的冰柱图表来可视化它。数据的结构是这样的:
Objective | Quarter | Task | Status | Value |
---|---|---|---|---|
Finish Project A | 1 | Sort data | Complete | 1 |
Finish Project A | 2 | Clean data | Complete | 1 |
Finish Project A | 2 | Visualize plot | Complete | 1 |
Finish Project A | 3 | begin report | In Progress | 1 |
Finish Project A | 3 | Edit report | Haven't started | 1 |
Finish Project B | 1 | Email boss | Haven't started | 1 |
问题出在图表中,即使使用这种格式读取数据,它也会根据对应于该季度的行数对其进行排序。因此,在图中,项目 a 的第 2 季度和第 3 季度将排在第一位,而第 1 季度则排在最后。我想把它翻转过来,让它按照季度的顺序排列,即 Q1->Q2->Q3->Q4,但我似乎找不到在情节表达中做到这一点的好方法。以下是我目前正在使用的代码:
fig = px.icicle(df, path=['Objective','Quarter','Task','Status'], values='Value', color='Status',
color_discrete_map='Haven't started':'red','In Progress':'yellow','Complete':'green',
maxdepth=3
)
我遇到的另一个问题是,我将它按状态列着色,但每当一个季度的混合状态不是全部一个状态(即全部完成或进行中)时,它默认为紫色,这对于其余的单元格基本上是不可读的。有没有办法可以更改默认颜色,而不会因状态而丢失颜色?
【问题讨论】:
您的示例代码不适用于您的示例代码。没有列 Value 哦,修好了!简化数据时忘记包含该部分。 【参考方案1】: https://plotly.com/python-api-reference/generated/plotly.graph_objects.Icicle.html sort 是一个参数,使用update_traces()
将其设置为False
图形构建后,检查 colors,如果不在 status 定义的 dict 中,则覆盖
import pandas as pd
import plotly.express as px
df = pd.DataFrame(
[
["Finish Project A", 1, "Sort data", "Complete", 1],
["Finish Project A", 2, "Clean data", "Complete", 1],
["Finish Project A", 2, "Visualize plot", "Complete", 1],
["Finish Project A", 3, "begin report", "In Progress", 1],
["Finish Project A", 3, "Edit report", "Haven't started", 1],
["Finish Project B", 1, "Email boss", "Haven't started", 1],
],
columns=["Objective", "Quarter", "Task", "Status", "Value"],
)
cm = "Haven't started": "red", "In Progress": "yellow", "Complete": "green"
fig = px.icicle(
df,
path=["Objective", "Quarter", "Task", "Status"],
values="Value",
color="Status",
color_discrete_map=cm,
maxdepth=3,
)
# required changes. sort – Determines whether or not the sectors are reordered from largest to smallest.
# override color assigned to blocks with ambiguous status
fig.update_traces(
sort=False,
marker=
"colors": tuple(
c if c in cm.values() else "white" for c in fig.data[0]["marker"]["colors"]
)
,
)
【讨论】:
以上是关于Plotly Express Icicle 可视化中的自定义排序的主要内容,如果未能解决你的问题,请参考以下文章
4000字,25张精美交互图表,开启Plotly Express之旅
4000字,25张精美交互图表,开启Plotly Express之旅