Skip to content

Commit 5afa3c9

Browse files
committed
Merge master and revert 1.9.13 changes
2 parents 0f3a048 + fbf3b74 commit 5afa3c9

File tree

4 files changed

+158
-35
lines changed

4 files changed

+158
-35
lines changed

plotly/graph_reference/default-schema.json

Lines changed: 132 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -712,7 +712,8 @@
712712
"mollweide",
713713
"hammer",
714714
"transverse mercator",
715-
"albers usa"
715+
"albers usa",
716+
"winkel tripel"
716717
]
717718
}
718719
},
@@ -838,6 +839,114 @@
838839
false
839840
]
840841
},
842+
"images": {
843+
"items": {
844+
"image": {
845+
"layer": {
846+
"description": "Specifies whether images are drawn below or above traces. When `xref` and `yref` are both set to `paper`, image is drawn below the entire plot area.",
847+
"dflt": "above",
848+
"role": "info",
849+
"valType": "enumerated",
850+
"values": [
851+
"below",
852+
"above"
853+
]
854+
},
855+
"opacity": {
856+
"description": "Sets the opacity of the image.",
857+
"dflt": 1,
858+
"max": 1,
859+
"min": 0,
860+
"role": "info",
861+
"valType": "number"
862+
},
863+
"role": "object",
864+
"sizex": {
865+
"description": "Sets the image container size horizontally. The image will be sized based on the `position` value. When `xref` is set to `paper`, units are sized relative to the plot width.",
866+
"dflt": 0,
867+
"role": "info",
868+
"valType": "number"
869+
},
870+
"sizey": {
871+
"description": "Sets the image container size vertically. The image will be sized based on the `position` value. When `yref` is set to `paper`, units are sized relative to the plot height.",
872+
"dflt": 0,
873+
"role": "info",
874+
"valType": "number"
875+
},
876+
"sizing": {
877+
"description": "Specifies which dimension of the image to constrain.",
878+
"dflt": "contain",
879+
"role": "info",
880+
"valType": "enumerated",
881+
"values": [
882+
"fill",
883+
"contain",
884+
"stretch"
885+
]
886+
},
887+
"source": {
888+
"description": "Specifies the URL of the image to be used. The URL must be accessible from the ___domain where the plot code is run, and can be either relative or absolute.",
889+
"role": "info",
890+
"valType": "string"
891+
},
892+
"x": {
893+
"description": "Sets the image's x position. When `xref` is set to `paper`, units are sized relative to the plot height. See `xref` for more info",
894+
"dflt": 0,
895+
"role": "info",
896+
"valType": "number"
897+
},
898+
"xanchor": {
899+
"description": "Sets the anchor for the x position",
900+
"dflt": "left",
901+
"role": "info",
902+
"valType": "enumerated",
903+
"values": [
904+
"left",
905+
"center",
906+
"right"
907+
]
908+
},
909+
"xref": {
910+
"description": "Sets the images's x coordinate axis. If set to a x axis id (e.g. *x* or *x2*), the `x` position refers to an x data coordinate If set to *paper*, the `x` position refers to the distance from the left of plot in normalized coordinates where *0* (*1*) corresponds to the left (right).",
911+
"dflt": "paper",
912+
"role": "info",
913+
"valType": "enumerated",
914+
"values": [
915+
"paper",
916+
"/^x([2-9]|[1-9][0-9]+)?$/"
917+
]
918+
},
919+
"y": {
920+
"description": "Sets the image's y position. When `yref` is set to `paper`, units are sized relative to the plot height. See `yref` for more info",
921+
"dflt": 0,
922+
"role": "info",
923+
"valType": "number"
924+
},
925+
"yanchor": {
926+
"description": "Sets the anchor for the y position.",
927+
"dflt": "top",
928+
"role": "info",
929+
"valType": "enumerated",
930+
"values": [
931+
"top",
932+
"middle",
933+
"bottom"
934+
]
935+
},
936+
"yref": {
937+
"description": "Sets the images's y coordinate axis. If set to a y axis id (e.g. *y* or *y2*), the `y` position refers to a y data coordinate. If set to *paper*, the `y` position refers to the distance from the bottom of the plot in normalized coordinates where *0* (*1*) corresponds to the bottom (top).",
938+
"dflt": "paper",
939+
"role": "info",
940+
"valType": "enumerated",
941+
"values": [
942+
"paper",
943+
"/^y([2-9]|[1-9][0-9]+)?$/"
944+
]
945+
}
946+
}
947+
},
948+
"role": "object"
949+
},
841950
"legend": {
842951
"bgcolor": {
843952
"description": "Sets the legend background color.",
@@ -877,6 +986,16 @@
877986
"valType": "number"
878987
}
879988
},
989+
"orientation": {
990+
"description": "Sets the orientation of the legend.",
991+
"dflt": "v",
992+
"role": "info",
993+
"valType": "enumerated",
994+
"values": [
995+
"v",
996+
"h"
997+
]
998+
},
880999
"role": "object",
8811000
"tracegroupgap": {
8821001
"description": "Sets the amount of vertical space (in px) between legend groups.",
@@ -6018,14 +6137,15 @@
60186137
"valType": "number"
60196138
},
60206139
"barmode": {
6021-
"description": "Determines how bars at the same ___location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *group*, the bars are plotted next to one another centered around the shared ___location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars.",
6140+
"description": "Determines how bars at the same ___location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *relative*, the bars are stacked on top of one another, with negative values below the axis, positive values above With *group*, the bars are plotted next to one another centered around the shared ___location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars.",
60226141
"dflt": "group",
60236142
"role": "info",
60246143
"valType": "enumerated",
60256144
"values": [
60266145
"stack",
60276146
"group",
6028-
"overlay"
6147+
"overlay",
6148+
"relative"
60296149
]
60306150
},
60316151
"barnorm": {
@@ -9298,14 +9418,15 @@
92989418
"valType": "number"
92999419
},
93009420
"barmode": {
9301-
"description": "Determines how bars at the same ___location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *group*, the bars are plotted next to one another centered around the shared ___location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars.",
9421+
"description": "Determines how bars at the same ___location coordinate are displayed on the graph. With *stack*, the bars are stacked on top of one another With *relative*, the bars are stacked on top of one another, with negative values below the axis, positive values above With *group*, the bars are plotted next to one another centered around the shared ___location. With *overlay*, the bars are plotted over one another, you might need to an *opacity* to see multiple bars.",
93029422
"dflt": "group",
93039423
"role": "info",
93049424
"valType": "enumerated",
93059425
"values": [
93069426
"stack",
93079427
"group",
9308-
"overlay"
9428+
"overlay",
9429+
"relative"
93099430
]
93109431
},
93119432
"barnorm": {
@@ -15156,6 +15277,12 @@
1515615277
},
1515715278
"scattergl": {
1515815279
"attributes": {
15280+
"connectgaps": {
15281+
"description": "Determines whether or not gaps (i.e. {nan} or missing values) in the provided data arrays are connected.",
15282+
"dflt": false,
15283+
"role": "info",
15284+
"valType": "boolean"
15285+
},
1515915286
"dx": {
1516015287
"description": "Sets the x coordinate step. See `x0` for more info.",
1516115288
"dflt": 1,

plotly/offline/offline.py

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616
from plotly import tools, utils
1717
from plotly.exceptions import PlotlyError
1818

19-
2019
try:
2120
import IPython
21+
from IPython.display import HTML, display
2222
_ipython_imported = True
2323
except ImportError:
2424
_ipython_imported = False
@@ -29,10 +29,8 @@
2929
except ImportError:
3030
_matplotlib_imported = False
3131

32-
3332
__PLOTLY_OFFLINE_INITIALIZED = False
3433

35-
3634
def download_plotlyjs(download_url):
3735
warnings.warn('''
3836
`download_plotlyjs` is deprecated and will be removed in the
@@ -50,25 +48,30 @@ def get_plotlyjs():
5048

5149
def init_notebook_mode():
5250
"""
53-
Initialize Plotly Offline mode in an IPython Notebook.
54-
Run this function at the start of an IPython notebook
55-
to load the necessary javascript files for creating
56-
Plotly graphs with plotly.offline.iplot.
51+
Initialize plotly.js in the browser if it hasn't been loaded into the DOM
52+
yet. This is an idempotent method and can and should be called from any
53+
offline methods that require plotly.js to be loaded into the notebook dom.
5754
"""
58-
if not tools._ipython_imported:
55+
if not _ipython_imported:
5956
raise ImportError('`iplot` can only run inside an IPython Notebook.')
60-
from IPython.display import HTML, display
6157

6258
global __PLOTLY_OFFLINE_INITIALIZED
6359
# Inject plotly.js into the output cell
64-
display(HTML("<script type='text/javascript'>" +
65-
"define('plotly', function(require, exports, module) {" +
66-
get_plotlyjs() +
67-
"});" +
68-
"require(['plotly'], function(Plotly) {" +
69-
"window.Plotly = Plotly;" +
70-
"});" +
71-
"</script>"))
60+
script_inject = (
61+
''
62+
'<script type=\'text/javascript\'>'
63+
'if(!window.Plotly){{'
64+
'define(\'plotly\', function(require, exports, module) {{'
65+
'{script}'
66+
'}});'
67+
'require([\'plotly\'], function(Plotly) {{'
68+
'window.Plotly = Plotly;'
69+
'}});'
70+
'}}'
71+
'</script>'
72+
'').format(script=get_plotlyjs())
73+
74+
display(HTML(script_inject))
7275
__PLOTLY_OFFLINE_INITIALIZED = True
7376

7477

@@ -173,7 +176,6 @@ def iplot(figure_or_data, show_link=True, link_text='Export to plot.ly',
173176
```
174177
from plotly.offline import init_notebook_mode, iplot
175178
init_notebook_mode()
176-
177179
iplot([{'x': [1, 2, 3], 'y': [5, 2, 7]}])
178180
```
179181
"""
@@ -189,8 +191,6 @@ def iplot(figure_or_data, show_link=True, link_text='Export to plot.ly',
189191
if not tools._ipython_imported:
190192
raise ImportError('`iplot` can only run inside an IPython Notebook.')
191193

192-
from IPython.display import HTML, display
193-
194194
plot_html, plotdivid, width, height = _plot_html(
195195
figure_or_data, show_link, link_text, validate,
196196
'100%', 525, global_requirejs=True)
@@ -424,13 +424,12 @@ def iplot_mpl(mpl_fig, resize=False, strip_style=False,
424424
from plotly.offline import init_notebook_mode, iplot_mpl
425425
import matplotlib.pyplot as plt
426426
427-
init_notebook_mode()
428-
429427
fig = plt.figure()
430428
x = [10, 15, 20, 25, 30]
431429
y = [100, 250, 200, 150, 300]
432430
plt.plot(x, y, "o")
433431
432+
init_notebook_mode()
434433
iplot_mpl(fig)
435434
```
436435
"""
@@ -454,10 +453,9 @@ def enable_mpl_offline(resize=False, strip_style=False,
454453
455454
Example:
456455
```
457-
from plotly.offline import init_notebook_mode, enable_mpl_offline
456+
from plotly.offline import enable_mpl_offline
458457
import matplotlib.pyplot as plt
459458
460-
init_notebook_mode()
461459
enable_mpl_offline()
462460
463461
fig = plt.figure()
@@ -467,8 +465,8 @@ def enable_mpl_offline(resize=False, strip_style=False,
467465
fig
468466
```
469467
"""
470-
if not __PLOTLY_OFFLINE_INITIALIZED:
471-
init_notebook_mode()
468+
init_notebook_mode()
469+
472470
ip = IPython.core.getipython.get_ipython()
473471
formatter = ip.display_formatter.formatters['text/html']
474472
formatter.for_type(matplotlib.figure.Figure,

plotly/tests/test_optional/test_offline/test_offline.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
class PlotlyOfflineTestCase(TestCase):
2929
def setUp(self):
30-
plotly.offline.offline.__PLOTLY_OFFLINE_INITIALIZED = False
30+
pass
3131

3232
@raises(plotly.exceptions.PlotlyError)
3333
def test_iplot_doesnt_work_before_you_call_init_notebook_mode(self):
@@ -87,4 +87,3 @@ def test_default_mpl_plot_generates_expected_html(self):
8787
self.assertTrue(PLOTLYJS in html) # and the source code
8888
# and it's an <html> doc
8989
self.assertTrue(html.startswith('<html>') and html.endswith('</html>'))
90-

plotly/version.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
__version__ = '1.9.12'
2-
1+
__version__ = '1.10.0'

0 commit comments

Comments
 (0)