Skip to content

Commit 25fd783

Browse files
Show dataTipRows on hover for scatter plots
1 parent c016b51 commit 25fd783

File tree

1 file changed

+13
-30
lines changed

1 file changed

+13
-30
lines changed

plotly/plotlyfig_aux/handlegraphics/updateScatter.m

Lines changed: 13 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
function data = updateScatter(obj,plotIndex)
2-
%-INITIALIZATIONS-%
32
axIndex = obj.getAxisIndex(obj.State.Plot(plotIndex).AssociatedAxis);
43
[xSource, ySource] = findSourceAxis(obj,axIndex);
54
plotData = obj.State.Plot(plotIndex).Handle;
65

7-
%-check is 3D scatter-%
8-
isScatter3D = isprop(plotData,"ZData") && ~isempty(plotData.ZData);
6+
data.mode = "markers";
7+
data.visible = plotData.Visible == "on";
8+
data.name = plotData.DisplayName;
9+
data.marker = extractScatterMarker(plotData);
10+
[data.x, data.y] = getTraceData2D(plotData);
911

10-
%-set trace-%
12+
isScatter3D = isprop(plotData,"ZData") && ~isempty(plotData.ZData);
1113
if ~isScatter3D
1214
data.type = "scatter";
1315
data.xaxis = "x" + xSource;
@@ -16,37 +18,23 @@
1618
else
1719
data.type = "scatter3d";
1820
data.scene = "scene" + xSource;
19-
2021
updateScene(obj, plotIndex);
21-
end
22-
23-
data.mode = "markers";
24-
data.visible = strcmp(plotData.Visible, "on");
25-
data.name = plotData.DisplayName;
26-
27-
%-set trace data-%
28-
[xData, yData] = getTraceData2D(plotData);
29-
data.x = xData;
30-
data.y = yData;
31-
32-
if isScatter3D
3322
data.z = plotData.ZData;
23+
data.marker.size = 2*data.marker.size;
3424
end
3525

36-
%-set trace marker-%
37-
data.marker = extractScatterMarker(plotData);
38-
39-
if isScatter3D
40-
markerSize = data.marker.size;
41-
data.marker.size = 2*markerSize;
26+
dataTipRows = plotData.DataTipTemplate.DataTipRows;
27+
dataTipRows = dataTipRows(~ismember({dataTipRows.Label},["Size" "Color" "X" "Y" "Z"]));
28+
if numel(dataTipRows) > 0
29+
customLabel = join(string({dataTipRows.Label}) + ": " + string({dataTipRows.Value}), "<br>");
30+
data.hovertext = "X: " + data.x + "<br>" + "Y: " + data.y + "<br>" + customLabel;
31+
data.hoverinfo = "text";
4232
end
4333

44-
%-set trace legend-%
4534
data.showlegend = getShowLegend(plotData);
4635
end
4736

4837
function updateScene(obj, dataIndex)
49-
%-INITIALIZATIONS-%
5038
axIndex = obj.getAxisIndex(obj.State.Plot(dataIndex).AssociatedAxis);
5139
plotData = obj.State.Plot(dataIndex).Handle;
5240
axisData = plotData.Parent;
@@ -114,7 +102,6 @@ function updateScene(obj, dataIndex)
114102
if isduration(xTick) || isdatetime(xTick)
115103
xTickChar = char(xTick);
116104
xTickLabel = axisData.XTickLabel;
117-
118105
for n = 1:length(xTickLabel)
119106
for m = 1:size(xTickChar, 1)
120107
if ~isempty(strfind(string(xTickChar(m, :)), xTickLabel{n}))
@@ -129,7 +116,6 @@ function updateScene(obj, dataIndex)
129116
if isduration(yTick) || isdatetime(yTick)
130117
yTickChar = char(yTick);
131118
yTickLabel = axisData.YTickLabel;
132-
133119
for n = 1:length(yTickLabel)
134120
for m = 1:size(yTickChar, 1)
135121
if ~isempty(strfind(string(yTickChar(m, :)), yTickLabel{n}))
@@ -259,10 +245,8 @@ function updateCategoricalAxis(obj, plotIndex)
259245

260246
function jitWeight = getJitWeight(jitData, refData)
261247
jitUnique = sort(unique(jitData), "ascend");
262-
263248
for n = 1:length(jitUnique)
264249
jitInd = find(jitData == jitUnique(n));
265-
266250
if length(jitInd) > 1
267251
refDataN = refData(jitInd);
268252
stdData(n) = std(refDataN(~isnan(refDataN)));
@@ -278,7 +262,6 @@ function updateCategoricalAxis(obj, plotIndex)
278262
refPoints = linspace(min(refData), max(refData), 2*length(refData));
279263
[densityData, refPoints] = ksdensity(refData, refPoints);
280264
densityData = jitWeight * rescale(densityData, 0, 1);
281-
282265
for n = 1:length(refData)
283266
[~, refInd] = min(abs(refPoints - refData(n)));
284267
jitData(n) = jitData(n) * densityData(refInd);

0 commit comments

Comments
 (0)