Skip to content

Commit ece427d

Browse files
px.IdentityMap
1 parent 4ef310f commit ece427d

File tree

3 files changed

+39
-3
lines changed

3 files changed

+39
-3
lines changed

Diff for: packages/python/plotly/plotly/express/__init__.py

+2
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
set_mapbox_access_token,
5454
defaults,
5555
get_trendline_results,
56+
IdentityMap,
5657
)
5758

5859
from . import data, colors # noqa: F401
@@ -95,4 +96,5 @@
9596
"colors",
9697
"set_mapbox_access_token",
9798
"get_trendline_results",
99+
"IdentityMap",
98100
]

Diff for: packages/python/plotly/plotly/express/_core.py

+22-3
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,24 @@ def __init__(self):
4141
defaults = PxDefaults()
4242
del PxDefaults
4343

44+
45+
class IdentityMap(object):
46+
"""
47+
`dict`-like object which can be passed in to arguments like `color_discrete_map` to
48+
use the provided data values as colors, rather than mapping them to colors cycled
49+
from `color_discrete_sequence`.
50+
"""
51+
52+
def __getitem__(self, key):
53+
return key
54+
55+
def __contains__(self, key):
56+
return True
57+
58+
def copy(self):
59+
return self
60+
61+
4462
MAPBOX_TOKEN = None
4563

4664

@@ -1404,9 +1422,10 @@ def make_figure(args, constructor, trace_patch={}, layout_patch={}):
14041422
for col, val, m in zip(grouper, group_name, grouped_mappings):
14051423
if col != one_group:
14061424
key = get_label(args, col)
1407-
mapping_labels[key] = str(val)
1408-
if m.show_in_trace_name:
1409-
trace_name_labels[key] = str(val)
1425+
if not isinstance(m.val_map, IdentityMap):
1426+
mapping_labels[key] = str(val)
1427+
if m.show_in_trace_name:
1428+
trace_name_labels[key] = str(val)
14101429
if m.variable == "animation_frame":
14111430
frame_name = val
14121431
trace_name = ", ".join(trace_name_labels.values())

Diff for: packages/python/plotly/plotly/tests/test_core/test_px/test_px_input.py

+15
Original file line numberDiff line numberDiff line change
@@ -323,3 +323,18 @@ def test_size_column():
323323
df = px.data.tips()
324324
fig = px.scatter(df, x=df["size"], y=df.tip)
325325
assert fig.data[0].hovertemplate == "size=%{x}<br>tip=%{y}<extra></extra>"
326+
327+
328+
def test_identity_map():
329+
fig = px.scatter(
330+
x=[1, 2],
331+
y=[1, 2],
332+
symbol=["a", "b"],
333+
color=["red", "blue"],
334+
color_discrete_map=px.IdentityMap(),
335+
)
336+
assert fig.data[0].marker.color == "red"
337+
assert fig.data[1].marker.color == "blue"
338+
assert "color" not in fig.data[0].hovertemplate
339+
assert "symbol" in fig.data[0].hovertemplate
340+
assert fig.layout.legend.title.text == "symbol"

0 commit comments

Comments
 (0)