Skip to content

Commit 93cdc5e

Browse files
Merge pull request #2304 from plotly/px_hover_name
hide name from within hovertemplate
2 parents b48b41a + f8c1465 commit 93cdc5e

File tree

3 files changed

+36
-21
lines changed

3 files changed

+36
-21
lines changed

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,7 @@ def make_trace_kwargs(args, trace_spec, trace_data, mapping_labels, sizeref):
389389
]:
390390
hover_lines = [k + "=" + v for k, v in mapping_labels.items()]
391391
trace_patch["hovertemplate"] = hover_header + "<br>".join(hover_lines)
392+
trace_patch["hovertemplate"] += "<extra></extra>"
392393
return trace_patch, fit_results
393394

394395

@@ -1445,8 +1446,6 @@ def make_figure(args, constructor, trace_patch={}, layout_patch={}):
14451446
)
14461447
if trace_spec.constructor in [go.Bar, go.Violin, go.Box, go.Histogram]:
14471448
trace.update(alignmentgroup=True, offsetgroup=trace_name)
1448-
if trace_spec.constructor not in [go.Parcats, go.Parcoords]:
1449-
trace.update(hoverlabel=dict(namelength=0))
14501449
trace_names.add(trace_name)
14511450

14521451
# Init subplot row/col

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

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def test_custom_data_scatter():
5050
assert fig.data[0].customdata.shape[1] == 4
5151
assert (
5252
fig.data[0].hovertemplate
53-
== "sepal_width=%{x}<br>sepal_length=%{y}<br>petal_length=%{customdata[2]}<br>petal_width=%{customdata[3]}<br>species_id=%{customdata[0]}"
53+
== "sepal_width=%{x}<br>sepal_length=%{y}<br>petal_length=%{customdata[2]}<br>petal_width=%{customdata[3]}<br>species_id=%{customdata[0]}<extra></extra>"
5454
)
5555

5656

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

+34-18
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,23 @@ def test_numpy_labels():
2929
fig = px.scatter(
3030
x=[1, 2, 3], y=[2, 3, 4], labels={"x": "time"}
3131
) # other labels will be kw arguments
32-
assert fig.data[0]["hovertemplate"] == "time=%{x}<br>y=%{y}"
32+
assert fig.data[0]["hovertemplate"] == "time=%{x}<br>y=%{y}<extra></extra>"
3333

3434

3535
def test_with_index():
3636
tips = px.data.tips()
3737
fig = px.scatter(tips, x=tips.index, y="total_bill")
38-
assert fig.data[0]["hovertemplate"] == "index=%{x}<br>total_bill=%{y}"
38+
assert (
39+
fig.data[0]["hovertemplate"] == "index=%{x}<br>total_bill=%{y}<extra></extra>"
40+
)
3941
fig = px.scatter(tips, x=tips.index, y=tips.total_bill)
40-
assert fig.data[0]["hovertemplate"] == "index=%{x}<br>total_bill=%{y}"
42+
assert (
43+
fig.data[0]["hovertemplate"] == "index=%{x}<br>total_bill=%{y}<extra></extra>"
44+
)
4145
fig = px.scatter(tips, x=tips.index, y=tips.total_bill, labels={"index": "number"})
42-
assert fig.data[0]["hovertemplate"] == "number=%{x}<br>total_bill=%{y}"
46+
assert (
47+
fig.data[0]["hovertemplate"] == "number=%{x}<br>total_bill=%{y}<extra></extra>"
48+
)
4349
# We do not allow "x=index"
4450
with pytest.raises(ValueError) as err_msg:
4551
fig = px.scatter(tips, x="index", y="total_bill")
@@ -49,28 +55,34 @@ def test_with_index():
4955
tips = px.data.tips()
5056
tips.index.name = "item"
5157
fig = px.scatter(tips, x=tips.index, y="total_bill")
52-
assert fig.data[0]["hovertemplate"] == "item=%{x}<br>total_bill=%{y}"
58+
assert fig.data[0]["hovertemplate"] == "item=%{x}<br>total_bill=%{y}<extra></extra>"
5359

5460

5561
def test_pandas_series():
5662
tips = px.data.tips()
5763
before_tip = tips.total_bill - tips.tip
5864
fig = px.bar(tips, x="day", y=before_tip)
59-
assert fig.data[0].hovertemplate == "day=%{x}<br>y=%{y}"
65+
assert fig.data[0].hovertemplate == "day=%{x}<br>y=%{y}<extra></extra>"
6066
fig = px.bar(tips, x="day", y=before_tip, labels={"y": "bill"})
61-
assert fig.data[0].hovertemplate == "day=%{x}<br>bill=%{y}"
67+
assert fig.data[0].hovertemplate == "day=%{x}<br>bill=%{y}<extra></extra>"
6268
# lock down that we can pass df.col to facet_*
6369
fig = px.bar(tips, x="day", y="tip", facet_row=tips.day, facet_col=tips.day)
64-
assert fig.data[0].hovertemplate == "day=%{x}<br>tip=%{y}"
70+
assert fig.data[0].hovertemplate == "day=%{x}<br>tip=%{y}<extra></extra>"
6571

6672

6773
def test_several_dataframes():
6874
df = pd.DataFrame(dict(x=[0, 1], y=[1, 10], z=[0.1, 0.8]))
6975
df2 = pd.DataFrame(dict(time=[23, 26], money=[100, 200]))
7076
fig = px.scatter(df, x="z", y=df2.money, size="x")
71-
assert fig.data[0].hovertemplate == "z=%{x}<br>y=%{y}<br>x=%{marker.size}"
77+
assert (
78+
fig.data[0].hovertemplate
79+
== "z=%{x}<br>y=%{y}<br>x=%{marker.size}<extra></extra>"
80+
)
7281
fig = px.scatter(df2, x=df.z, y=df2.money, size=df.z)
73-
assert fig.data[0].hovertemplate == "x=%{x}<br>money=%{y}<br>size=%{marker.size}"
82+
assert (
83+
fig.data[0].hovertemplate
84+
== "x=%{x}<br>money=%{y}<br>size=%{marker.size}<extra></extra>"
85+
)
7486
# Name conflict
7587
with pytest.raises(NameError) as err_msg:
7688
fig = px.scatter(df, x="z", y=df2.money, size="y")
@@ -85,15 +97,18 @@ def test_several_dataframes():
8597
fig = px.scatter(x=df.y, y=df2.y)
8698
assert np.all(fig.data[0].x == np.array([3, 4]))
8799
assert np.all(fig.data[0].y == np.array([23, 24]))
88-
assert fig.data[0].hovertemplate == "x=%{x}<br>y=%{y}"
100+
assert fig.data[0].hovertemplate == "x=%{x}<br>y=%{y}<extra></extra>"
89101

90102
df = pd.DataFrame(dict(x=[0, 1], y=[3, 4]))
91103
df2 = pd.DataFrame(dict(x=[3, 5], y=[23, 24]))
92104
df3 = pd.DataFrame(dict(y=[0.1, 0.2]))
93105
fig = px.scatter(x=df.y, y=df2.y, size=df3.y)
94106
assert np.all(fig.data[0].x == np.array([3, 4]))
95107
assert np.all(fig.data[0].y == np.array([23, 24]))
96-
assert fig.data[0].hovertemplate == "x=%{x}<br>y=%{y}<br>size=%{marker.size}"
108+
assert (
109+
fig.data[0].hovertemplate
110+
== "x=%{x}<br>y=%{y}<br>size=%{marker.size}<extra></extra>"
111+
)
97112

98113
df = pd.DataFrame(dict(x=[0, 1], y=[3, 4]))
99114
df2 = pd.DataFrame(dict(x=[3, 5], y=[23, 24]))
@@ -102,7 +117,8 @@ def test_several_dataframes():
102117
assert np.all(fig.data[0].x == np.array([3, 4]))
103118
assert np.all(fig.data[0].y == np.array([23, 24]))
104119
assert (
105-
fig.data[0].hovertemplate == "x=%{x}<br>y=%{y}<br>hover_data_0=%{customdata[0]}"
120+
fig.data[0].hovertemplate
121+
== "x=%{x}<br>y=%{y}<br>hover_data_0=%{customdata[0]}<extra></extra>"
106122
)
107123

108124

@@ -111,7 +127,7 @@ def test_name_heuristics():
111127
fig = px.scatter(df, x=df.y, y=df.x, size=df.y)
112128
assert np.all(fig.data[0].x == np.array([3, 4]))
113129
assert np.all(fig.data[0].y == np.array([0, 1]))
114-
assert fig.data[0].hovertemplate == "y=%{marker.size}<br>x=%{y}"
130+
assert fig.data[0].hovertemplate == "y=%{marker.size}<br>x=%{y}<extra></extra>"
115131

116132

117133
def test_repeated_name():
@@ -133,7 +149,7 @@ def test_arrayattrable_numpy():
133149
)
134150
assert (
135151
fig.data[0]["hovertemplate"]
136-
== "total_bill=%{x}<br>tip=%{y}<br>hover_data_0=%{customdata[0]}"
152+
== "total_bill=%{x}<br>tip=%{y}<br>hover_data_0=%{customdata[0]}<extra></extra>"
137153
)
138154
tips = px.data.tips()
139155
fig = px.scatter(
@@ -145,7 +161,7 @@ def test_arrayattrable_numpy():
145161
)
146162
assert (
147163
fig.data[0]["hovertemplate"]
148-
== "total_bill=%{x}<br>tip=%{y}<br>suppl=%{customdata[0]}"
164+
== "total_bill=%{x}<br>tip=%{y}<br>suppl=%{customdata[0]}<extra></extra>"
149165
)
150166

151167

@@ -275,7 +291,7 @@ def test_int_col_names():
275291

276292
def test_data_frame_from_dict():
277293
fig = px.scatter({"time": [0, 1], "money": [1, 2]}, x="time", y="money")
278-
assert fig.data[0].hovertemplate == "time=%{x}<br>money=%{y}"
294+
assert fig.data[0].hovertemplate == "time=%{x}<br>money=%{y}<extra></extra>"
279295
assert np.all(fig.data[0].x == [0, 1])
280296

281297

@@ -306,4 +322,4 @@ def test_pass_df_columns():
306322
def test_size_column():
307323
df = px.data.tips()
308324
fig = px.scatter(df, x=df["size"], y=df.tip)
309-
assert fig.data[0].hovertemplate == "size=%{x}<br>tip=%{y}"
325+
assert fig.data[0].hovertemplate == "size=%{x}<br>tip=%{y}<extra></extra>"

0 commit comments

Comments
 (0)