Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d974535

Browse files
authored
Merge pull request #5000 from MarcoGorelli/hardcoded-var
fix: custom category order was hard-coded
2 parents 5e079e1 + 9043fff commit d974535

File tree

2 files changed

+38
-3
lines changed

2 files changed

+38
-3
lines changed

‎packages/python/plotly/plotly/express/_core.py‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,6 +2147,8 @@ def process_dataframe_timeline(args):
21472147

21482148

21492149
def process_dataframe_pie(args, trace_patch):
2150+
import numpy as np
2151+
21502152
names = args.get("names")
21512153
if names is None:
21522154
return args, trace_patch
@@ -2159,12 +2161,12 @@ def process_dataframe_pie(args, trace_patch):
21592161
uniques = df.get_column(names).unique(maintain_order=True).to_list()
21602162
order = [x for x in OrderedDict.fromkeys(list(order_in) + uniques) if x in uniques]
21612163

2162-
# Sort args['data_frame'] by column 'b' according to order `order`.
2164+
# Sort args['data_frame'] by column `names` according to order `order`.
21632165
token = nw.generate_temporary_column_name(8, df.columns)
21642166
args["data_frame"] = (
21652167
df.with_columns(
2166-
nw.col("b")
2167-
.replace_strict(order, range(len(order)), return_dtype=nw.UInt32)
2168+
nw.col(names)
2169+
.replace_strict(order, np.arange(len(order)), return_dtype=nw.UInt32)
21682170
.alias(token)
21692171
)
21702172
.sort(token)

‎packages/python/plotly/plotly/tests/test_optional/test_px/test_px_functions.py‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,39 @@ def test_pie_like_px():
5656
_compare_figures(trace, fig)
5757

5858

59+
def test_pie_custom_category_order(constructor):
60+
# https://github.com/plotly/plotly.py/issues/4999
61+
data = {
62+
"status": ["On Route", "Pending", "Waiting Result", "Delivered"],
63+
"count": [28, 10, 73, 8],
64+
}
65+
df = constructor(data)
66+
custom_order = ["Pending", "Waiting Result", "On Route", "Delivered"]
67+
result = px.pie(
68+
data_frame=df,
69+
values="count",
70+
names="status",
71+
category_orders={"status": custom_order},
72+
)
73+
assert list(result.to_dict()["data"][0]["labels"]) == [
74+
"Pending",
75+
"Waiting Result",
76+
"On Route",
77+
"Delivered",
78+
]
79+
values_ = np.array(
80+
[
81+
x[0]
82+
for x in sorted(
83+
zip(data["count"], data["status"]),
84+
key=lambda t: custom_order.index(t[1]),
85+
)
86+
]
87+
)
88+
trace = go.Pie(values=values_, labels=custom_order)
89+
_compare_figures(trace, result)
90+
91+
5992
def test_sunburst_treemap_colorscales():
6093
labels = ["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"]
6194
parents = ["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve"]

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /