1
+ ---
2
+ permalink: python/3d-hover/
3
+ description: How to customize 3d hover options in python with Plotly.
4
+ name: Python 3D Hover Options | Plotly
5
+ has_thumbnail: true
6
+ thumbnail: thumbnail/3d-hover-options.jpg
7
+ layout: user-guide
8
+ name: 3D Hover Options
9
+ language: python
10
+ title: Python 3D Hover Options | Plotly
11
+ display_as: layout_opt
12
+ has_thumbnail: false
13
+ page_type: example_index
14
+ order: 19
15
+ ipynb: ~notebook_demo/257
16
+ ---
17
+ {% raw %}
18
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
19
+ </ div >
20
+ < div class ="inner_cell ">
21
+ < div class ="text_cell_render border-box-sizing rendered_html ">
22
+ < h4 id ="New-to-Plotly? "> New to Plotly?< a class ="anchor-link " href ="#New-to-Plotly? "> ¶</ a > </ h4 > < p > Plotly's Python library is free and open source! < a href ="https://plot.ly/python/getting-started/ "> Get started</ a > by downloading the client and < a href ="https://plot.ly/python/getting-started/ "> reading the primer</ a > .
23
+ < br > You can set up Plotly to work in < a href ="https://plot.ly/python/getting-started/#initialization-for-online-plotting "> online</ a > or < a href ="https://plot.ly/python/getting-started/#initialization-for-offline-plotting "> offline</ a > mode, or in < a href ="https://plot.ly/python/getting-started/#start-plotting-online "> jupyter notebooks</ a > .
24
+ < br > We also have a quick-reference < a href ="https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf "> cheatsheet</ a > (new!) to help you get started!</ p >
25
+
26
+ </ div >
27
+ </ div >
28
+ </ div >
29
+ < div class ="cell border-box-sizing code_cell rendered ">
30
+ < div class ="input ">
31
+ < div class ="prompt input_prompt "> In [1]:</ div >
32
+ < div class ="inner_cell ">
33
+ < div class ="input_area ">
34
+ < div class =" highlight hl-ipython2 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> plotly.plotly</ span > < span class ="kn "> as</ span > < span class ="nn "> py</ span >
35
+ < span class ="kn "> import</ span > < span class ="nn "> plotly.graph_objs</ span > < span class ="kn "> as</ span > < span class ="nn "> go</ span >
36
+
37
+ < span class ="kn "> import</ span > < span class ="nn "> pandas</ span > < span class ="kn "> as</ span > < span class ="nn "> pd</ span >
38
+ </ pre > </ div >
39
+
40
+ </ div >
41
+ </ div >
42
+ </ div >
43
+
44
+ </ div >
45
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
46
+ </ div >
47
+ < div class ="inner_cell ">
48
+ < div class ="text_cell_render border-box-sizing rendered_html ">
49
+ < h4 id ="Customize-Hover-for-Spikelines "> Customize Hover for Spikelines< a class ="anchor-link " href ="#Customize-Hover-for-Spikelines "> ¶</ a > </ h4 > < p > By default, Plotly's 3D plots display lines called "spikelines" while hovering over a point.
50
+ These lines project from the hover point to each of the three axes' normal planes and
51
+ then extend from those projection data points to the planes' wall boundaries.</ p >
52
+
53
+ </ div >
54
+ </ div >
55
+ </ div >
56
+ < div class ="cell border-box-sizing code_cell rendered ">
57
+ < div class ="input ">
58
+ < div class ="prompt input_prompt "> In [2]:</ div >
59
+ < div class ="inner_cell ">
60
+ < div class ="input_area ">
61
+ < div class =" highlight hl-ipython2 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> plotly.plotly</ span > < span class ="kn "> as</ span > < span class ="nn "> py</ span >
62
+ < span class ="kn "> import</ span > < span class ="nn "> plotly.graph_objs</ span > < span class ="kn "> as</ span > < span class ="nn "> go</ span >
63
+
64
+ < span class ="kn "> import</ span > < span class ="nn "> numpy</ span > < span class ="kn "> as</ span > < span class ="nn "> np</ span >
65
+
66
+ < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Scatter3d</ span > < span class ="p "> (</ span >
67
+ < span class ="n "> x</ span > < span class ="o "> =</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> random</ span > < span class ="o "> .</ span > < span class ="n "> randn</ span > < span class ="p "> (</ span > < span class ="mi "> 50</ span > < span class ="p "> ),</ span >
68
+ < span class ="n "> y</ span > < span class ="o "> =</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> random</ span > < span class ="o "> .</ span > < span class ="n "> randn</ span > < span class ="p "> (</ span > < span class ="mi "> 50</ span > < span class ="p "> ),</ span >
69
+ < span class ="n "> z</ span > < span class ="o "> =</ span > < span class ="n "> np</ span > < span class ="o "> .</ span > < span class ="n "> random</ span > < span class ="o "> .</ span > < span class ="n "> randn</ span > < span class ="p "> (</ span > < span class ="mi "> 50</ span > < span class ="p "> ),</ span >
70
+ < span class ="p "> )]</ span >
71
+
72
+ < span class ="n "> layout</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Layout</ span > < span class ="p "> (</ span >
73
+ < span class ="n "> scene</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> Scene</ span > < span class ="p "> (</ span >
74
+ < span class ="n "> xaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> XAxis</ span > < span class ="p "> (</ span >
75
+ < span class ="n "> spikecolor</ span > < span class ="o "> =</ span > < span class ="s1 "> '#1fe5bd'</ span > < span class ="p "> ,</ span >
76
+ < span class ="n "> spikesides</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ,</ span >
77
+ < span class ="n "> spikethickness</ span > < span class ="o "> =</ span > < span class ="mi "> 6</ span > < span class ="p "> ,</ span >
78
+ < span class ="p "> ),</ span >
79
+ < span class ="n "> yaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> YAxis</ span > < span class ="p "> (</ span >
80
+ < span class ="n "> spikecolor</ span > < span class ="o "> =</ span > < span class ="s1 "> '#1fe5bd'</ span > < span class ="p "> ,</ span >
81
+ < span class ="n "> spikesides</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ,</ span >
82
+ < span class ="n "> spikethickness</ span > < span class ="o "> =</ span > < span class ="mi "> 6</ span > < span class ="p "> ,</ span >
83
+ < span class ="p "> ),</ span >
84
+ < span class ="n "> zaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> ZAxis</ span > < span class ="p "> (</ span >
85
+ < span class ="n "> spikecolor</ span > < span class ="o "> =</ span > < span class ="s1 "> '#1fe5bd'</ span > < span class ="p "> ,</ span >
86
+ < span class ="n "> spikethickness</ span > < span class ="o "> =</ span > < span class ="mi "> 6</ span > < span class ="p "> ,</ span >
87
+ < span class ="p "> ),</ span >
88
+ < span class ="p "> )</ span >
89
+ < span class ="p "> )</ span >
90
+
91
+ < span class ="n "> fig</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Figure</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="n "> layout</ span > < span class ="o "> =</ span > < span class ="n "> layout</ span > < span class ="p "> )</ span >
92
+ < span class ="n "> py</ span > < span class ="o "> .</ span > < span class ="n "> iplot</ span > < span class ="p "> (</ span > < span class ="n "> fig</ span > < span class ="p "> ,</ span > < span class ="n "> filename</ span > < span class ="o "> =</ span > < span class ="s1 "> 'hover-spikelines'</ span > < span class ="p "> )</ span >
93
+ </ pre > </ div >
94
+
95
+ </ div >
96
+ </ div >
97
+ </ div >
98
+
99
+ < div class ="output_wrapper ">
100
+ < div class ="output ">
101
+
102
+
103
+ < div class ="output_area ">
104
+
105
+ < div class ="prompt output_prompt "> Out[2]:</ div >
106
+
107
+
108
+
109
+ < div class ="output_html rendered_html output_subarea output_execute_result ">
110
+ < iframe id ="igraph " scrolling ="no " style ="border:none; " seamless ="seamless " src ="https://plot.ly/~PythonPlotBot/2829.embed " height ="525px " width ="100% "> </ iframe >
111
+ </ div >
112
+
113
+ </ div >
114
+
115
+ </ div >
116
+ </ div >
117
+
118
+ </ div >
119
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
120
+ </ div >
121
+ < div class ="inner_cell ">
122
+ < div class ="text_cell_render border-box-sizing rendered_html ">
123
+ < h4 id ="Customize-Hover-for-Surface-Contours "> Customize Hover for Surface Contours< a class ="anchor-link " href ="#Customize-Hover-for-Surface-Contours "> ¶</ a > </ h4 > < p > In addition to spikelines, Plotly 3D Surface plots also display surface contours on hover by default.
124
+ These are customized by styling the < a href ="https://plot.ly/python/reference/#surface-contours "> < code > contours</ code > </ a >
125
+ attribute in the surface trace.</ p >
126
+
127
+ </ div >
128
+ </ div >
129
+ </ div >
130
+ < div class ="cell border-box-sizing code_cell rendered ">
131
+ < div class ="input ">
132
+ < div class ="prompt input_prompt "> In [3]:</ div >
133
+ < div class ="inner_cell ">
134
+ < div class ="input_area ">
135
+ < div class =" highlight hl-ipython2 "> < pre > < span > </ span > < span class ="kn "> import</ span > < span class ="nn "> plotly.plotly</ span > < span class ="kn "> as</ span > < span class ="nn "> py</ span >
136
+ < span class ="kn "> import</ span > < span class ="nn "> plotly.graph_objs</ span > < span class ="kn "> as</ span > < span class ="nn "> go</ span >
137
+
138
+ < span class ="n "> x</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="mi "> 10</ span > < span class ="p "> ,</ span > < span class ="mi "> 20</ span > < span class ="p "> ,</ span > < span class ="mi "> 30</ span > < span class ="p "> ,</ span > < span class ="mi "> 40</ span > < span class ="p "> ]</ span >
139
+ < span class ="n "> y</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> ,</ span > < span class ="mi "> 3</ span > < span class ="p "> ]</ span >
140
+ < span class ="n "> z</ span > < span class ="o "> =</ span > < span class ="p "> [[</ span > < span class ="mi "> 2</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> ,</ span > < span class ="mi "> 2</ span > < span class ="p "> ,</ span > < span class ="mi "> 3</ span > < span class ="p "> ],</ span >
141
+ < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 1</ span > < span class ="p "> ],</ span >
142
+ < span class ="p "> [</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 1</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ],</ span >
143
+ < span class ="p "> [</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ,</ span > < span class ="mi "> 0</ span > < span class ="p "> ]]</ span >
144
+
145
+ < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="p "> [</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Surface</ span > < span class ="p "> (</ span >
146
+ < span class ="n "> opacity</ span > < span class ="o "> =</ span > < span class ="mf "> 0.9</ span > < span class ="p "> ,</ span >
147
+ < span class ="n "> x</ span > < span class ="o "> =</ span > < span class ="n "> x</ span > < span class ="p "> ,</ span >
148
+ < span class ="n "> y</ span > < span class ="o "> =</ span > < span class ="n "> y</ span > < span class ="p "> ,</ span >
149
+ < span class ="n "> z</ span > < span class ="o "> =</ span > < span class ="n "> z</ span > < span class ="p "> ,</ span >
150
+ < span class ="n "> contours</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> surface</ span > < span class ="o "> .</ span > < span class ="n "> Contours</ span > < span class ="p "> (</ span >
151
+ < span class ="n "> x</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> surface</ span > < span class ="o "> .</ span > < span class ="n "> contours</ span > < span class ="o "> .</ span > < span class ="n "> X</ span > < span class ="p "> (</ span >
152
+ < span class ="n "> highlight</ span > < span class ="o "> =</ span > < span class ="bp "> True</ span > < span class ="p "> ,</ span >
153
+ < span class ="n "> highlightcolor</ span > < span class ="o "> =</ span > < span class ="s2 "> "#41a7b3"</ span > < span class ="p "> ,</ span >
154
+ < span class ="p "> ),</ span >
155
+ < span class ="n "> y</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> surface</ span > < span class ="o "> .</ span > < span class ="n "> contours</ span > < span class ="o "> .</ span > < span class ="n "> Y</ span > < span class ="p "> (</ span > < span class ="n "> highlight</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ),</ span >
156
+ < span class ="n "> z</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> surface</ span > < span class ="o "> .</ span > < span class ="n "> contours</ span > < span class ="o "> .</ span > < span class ="n "> Z</ span > < span class ="p "> (</ span > < span class ="n "> highlight</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ),</ span >
157
+ < span class ="p "> )</ span >
158
+ < span class ="p "> )]</ span >
159
+
160
+ < span class ="n "> layout</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Layout</ span > < span class ="p "> (</ span >
161
+ < span class ="n "> scene</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> Scene</ span > < span class ="p "> (</ span >
162
+ < span class ="n "> xaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> XAxis</ span > < span class ="p "> (</ span > < span class ="n "> showspikes</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ),</ span >
163
+ < span class ="n "> yaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> YAxis</ span > < span class ="p "> (</ span > < span class ="n "> showspikes</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ),</ span >
164
+ < span class ="n "> zaxis</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> layout</ span > < span class ="o "> .</ span > < span class ="n "> scene</ span > < span class ="o "> .</ span > < span class ="n "> ZAxis</ span > < span class ="p "> (</ span > < span class ="n "> showspikes</ span > < span class ="o "> =</ span > < span class ="bp "> False</ span > < span class ="p "> ),</ span >
165
+ < span class ="p "> )</ span >
166
+ < span class ="p "> )</ span >
167
+
168
+ < span class ="n "> fig</ span > < span class ="o "> =</ span > < span class ="n "> go</ span > < span class ="o "> .</ span > < span class ="n "> Figure</ span > < span class ="p "> (</ span > < span class ="n "> data</ span > < span class ="o "> =</ span > < span class ="n "> data</ span > < span class ="p "> ,</ span > < span class ="n "> layout</ span > < span class ="o "> =</ span > < span class ="n "> layout</ span > < span class ="p "> )</ span >
169
+ < span class ="n "> py</ span > < span class ="o "> .</ span > < span class ="n "> iplot</ span > < span class ="p "> (</ span > < span class ="n "> fig</ span > < span class ="p "> ,</ span > < span class ="n "> filename</ span > < span class ="o "> =</ span > < span class ="s1 "> 'hover-surface-contours'</ span > < span class ="p "> )</ span >
170
+ </ pre > </ div >
171
+
172
+ </ div >
173
+ </ div >
174
+ </ div >
175
+
176
+ < div class ="output_wrapper ">
177
+ < div class ="output ">
178
+
179
+
180
+ < div class ="output_area ">
181
+
182
+ < div class ="prompt output_prompt "> Out[3]:</ div >
183
+
184
+
185
+
186
+ < div class ="output_html rendered_html output_subarea output_execute_result ">
187
+ < iframe id ="igraph " scrolling ="no " style ="border:none; " seamless ="seamless " src ="https://plot.ly/~PythonPlotBot/2831.embed " height ="525px " width ="100% "> </ iframe >
188
+ </ div >
189
+
190
+ </ div >
191
+
192
+ </ div >
193
+ </ div >
194
+
195
+ </ div >
196
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
197
+ </ div >
198
+ < div class ="inner_cell ">
199
+ < div class ="text_cell_render border-box-sizing rendered_html ">
200
+ < h4 id ="Reference "> Reference< a class ="anchor-link " href ="#Reference "> ¶</ a > </ h4 >
201
+ </ div >
202
+ </ div >
203
+ </ div >
204
+ < div class ="cell border-box-sizing text_cell rendered "> < div class ="prompt input_prompt ">
205
+ </ div >
206
+ < div class ="inner_cell ">
207
+ < div class ="text_cell_render border-box-sizing rendered_html ">
208
+ < p > See < a href ="https://plot.ly/python/reference/#layout-scene "> https://plot.ly/python/reference/#layout-scene</ a > and < a href ="https://plot.ly/python/reference/#surface-contours "> https://plot.ly/python/reference/#surface-contours</ a > for more information and options!</ p >
209
+
210
+ </ div >
211
+ </ div >
212
+ </ div >
213
+
214
+
215
+ {% endraw %}
0 commit comments