{ "cells": [ { "cell_type": "markdown", "id": "dd174498", "metadata": {}, "source": [ "(plotly:renderers)=\n", "# 图渲染\n", "\n", "参考:[Displaying Figures | Python | Plotly](https://plotly.com/python/renderers/)\n", "\n", "Plotly 的 Python 图形库 `plotly.py` 为您提供了关于如何以及在何处显示图的广泛选项。\n", "\n", "一般来说,有三种不同的方法可以用来显示图:\n", "\n", "1. 在脚本或笔记本的上下文中使用渲染器框架\n", "2. 在网络应用中使用 `Dash`\n", "3. 在 `ipywidgets` 上下文中使用 `FigureWidget`\n", "\n", "下面将讨论每种方法。\n", "\n", "## 使用渲染器框架显示图\n", "\n", "渲染器框架是一种灵活的方法,可以在各种上下文中显示 `plot.py` 图。要使用渲染器框架显示图形,可以调用图对象 `.show()` 方法,或将图传递给 `plotly.io.show` 函数。" ] }, { "cell_type": "code", "execution_count": 1, "id": "0df3de06", "metadata": {}, "outputs": [ { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "type": "bar", "y": [ 2, 1, 3 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "A Figure Displayed with fig.show()" } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "go.FigureWidget();\n", "\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displayed with fig.show()\"\n", ")\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "85a39515", "metadata": {}, "source": [ "在大多数情况下,您可以省略对 `.show()` 的调用,而允许图形显示自己。" ] }, { "cell_type": "code", "execution_count": 2, "id": "a1dd9723", "metadata": {}, "outputs": [ { "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "type": "bar", "y": [ 2, 1, 3 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 }, "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "barpolar" } ], "carpet": [ { "aaxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "baxis": { "endlinecolor": "#2a3f5f", "gridcolor": "white", "linecolor": "white", "minorgridcolor": "white", "startlinecolor": "#2a3f5f" }, "type": "carpet" } ], "choropleth": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "choropleth" } ], "contour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "type": "scatter" } ], "scatter3d": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatter3d" } ], "scattercarpet": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattercarpet" } ], "scattergeo": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergeo" } ], "scattergl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattergl" } ], "scattermapbox": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scattermapbox" } ], "scatterpolar": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolar" } ], "scatterpolargl": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterpolargl" } ], "scatterternary": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "scatterternary" } ], "surface": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "type": "surface" } ], "table": [ { "cells": { "fill": { "color": "#EBF0F8" }, "line": { "color": "white" } }, "header": { "fill": { "color": "#C8D4E3" }, "line": { "color": "white" } }, "type": "table" } ] }, "layout": { "annotationdefaults": { "arrowcolor": "#2a3f5f", "arrowhead": 0, "arrowwidth": 1 }, "autotypenumbers": "strict", "coloraxis": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "colorscale": { "diverging": [ [ 0, "#8e0152" ], [ 0.1, "#c51b7d" ], [ 0.2, "#de77ae" ], [ 0.3, "#f1b6da" ], [ 0.4, "#fde0ef" ], [ 0.5, "#f7f7f7" ], [ 0.6, "#e6f5d0" ], [ 0.7, "#b8e186" ], [ 0.8, "#7fbc41" ], [ 0.9, "#4d9221" ], [ 1, "#276419" ] ], "sequential": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ], "sequentialminus": [ [ 0, "#0d0887" ], [ 0.1111111111111111, "#46039f" ], [ 0.2222222222222222, "#7201a8" ], [ 0.3333333333333333, "#9c179e" ], [ 0.4444444444444444, "#bd3786" ], [ 0.5555555555555556, "#d8576b" ], [ 0.6666666666666666, "#ed7953" ], [ 0.7777777777777778, "#fb9f3a" ], [ 0.8888888888888888, "#fdca26" ], [ 1, "#f0f921" ] ] }, "colorway": [ "#636efa", "#EF553B", "#00cc96", "#ab63fa", "#FFA15A", "#19d3f3", "#FF6692", "#B6E880", "#FF97FF", "#FECB52" ], "font": { "color": "#2a3f5f" }, "geo": { "bgcolor": "white", "lakecolor": "white", "landcolor": "#E5ECF6", "showlakes": true, "showland": true, "subunitcolor": "white" }, "hoverlabel": { "align": "left" }, "hovermode": "closest", "mapbox": { "style": "light" }, "paper_bgcolor": "white", "plot_bgcolor": "#E5ECF6", "polar": { "angularaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "radialaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "scene": { "xaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "yaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" }, "zaxis": { "backgroundcolor": "#E5ECF6", "gridcolor": "white", "gridwidth": 2, "linecolor": "white", "showbackground": true, "ticks": "", "zerolinecolor": "white" } }, "shapedefaults": { "line": { "color": "#2a3f5f" } }, "ternary": { "aaxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "baxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" }, "bgcolor": "#E5ECF6", "caxis": { "gridcolor": "white", "linecolor": "white", "ticks": "" } }, "title": { "x": 0.05 }, "xaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "title": { "standoff": 15 }, "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "A Figure Displaying Itself" } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displaying Itself\"\n", ")\n", "fig" ] }, { "cell_type": "markdown", "id": "c6a6c036", "metadata": {}, "source": [ "> 准确地说,当以下两个条件为真时,图将使用当前默认渲染器显示自己。首先,单元格中的最后一个表达式必须求值为一个图。其次,`plot.py` 必须在 IPython 内核中运行。\n", "\n", "**在许多上下文中,将自动选择适当的呈现程序,您将不需要执行任何附加配置**。这些上下文包括经典的 [Jupyter Notebook](https://jupyter.org/)、[JupyterLab](https://jupyterlab.readthedocs.io/en/stable/)(如果安装了 JupyterLab 扩展)、[Visual Studio Code notebooks](https://code.visualstudio.com/docs/python/jupyter-support)、[谷歌 Collaboration](https://colab.research.google.com/notebooks/intro.ipynb)、[Kaggle](https://www.kaggle.com/kernels) Notebook、[Azure](https://notebooks.azure.com/) Notebook 和 [Python 交互式 shell](https://www.python.org/shell/)。\n", "\n", "通过选择兼容的渲染器,包括 [IPython 控制台](https://docs.spyder-ide.org/ipythonconsole.html)、[QtConsole](https://qtconsole.readthedocs.io/en/stable/)、[Spyder](https://www.spyder-ide.org/) 等,可以支持其他上下文。\n", "\n", "接下来,我们将展示如何配置默认渲染器。在那之后,我们将描述所有的内置渲染器,并讨论为什么您可能会选择使用它们。\n", "\n", "> 注意:`renderers`框架是 `plotly.offline.iplot` 和 `plotly.offline.plot` 函数的泛化,它们是 `plotly.py` 版本 4 之前推荐的显示图形的方法。这些函数已经使用渲染器框架重新实现,并且仍然支持向后兼容性,但是这里不讨论它们。\n", "\n", "## 在 Dash 中显示图\n", "\n", "## 在 Dash 中 Plotly Charts\n", "\n", "{term}`Dash` 是使用 Plotly 图形在 Python 中构建分析应用程序的最佳方法。要运行下面的应用程序,请运行 `pip install dash`,点击“下载”获取代码并运行 `python app.py`。\n", "\n", "开始于[官方的 Dash文档](https://dash.plotly.com/installation),并学习如何轻松[风格化](https://plotly.com/dash/design-kit/)和[部署](https://plotly.com/dash/app-manager/)应用程序于这样的 [Dash 企业版](https://plotly.com/dash/)。" ] }, { "cell_type": "code", "execution_count": 3, "id": "b7cdc5dc", "metadata": { "tags": [ "remove-input" ] }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import IFrame\n", "snippet_url = 'https://dash-gallery.plotly.host/python-docs-dash-snippets/'\n", "IFrame(snippet_url + 'renderers', width='100%', height=630)" ] }, { "cell_type": "markdown", "id": "32aae998", "metadata": {}, "source": [ "## 设置默认渲染器\n", "\n", "当前和可用的**渲染器**使用 `plotly.io.renderers` 配置对象进行配置。显示此对象以查看当前默认渲染器和所有可用渲染器的列表。" ] }, { "cell_type": "code", "execution_count": 4, "id": "477b74d1", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Renderers configuration\n", "-----------------------\n", " Default renderer: 'plotly_mimetype+notebook'\n", " Available renderers:\n", " ['plotly_mimetype', 'jupyterlab', 'nteract', 'vscode',\n", " 'notebook', 'notebook_connected', 'kaggle', 'azure', 'colab',\n", " 'cocalc', 'databricks', 'json', 'png', 'jpeg', 'jpg', 'svg',\n", " 'pdf', 'browser', 'firefox', 'chrome', 'chromium', 'iframe',\n", " 'iframe_connected', 'sphinx_gallery', 'sphinx_gallery_png']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import plotly.io as pio\n", "pio.renderers" ] }, { "cell_type": "markdown", "id": "2fdf26bd", "metadata": {}, "source": [ "在显示 `pio.renderers` 时看到的默认渲染器可能与这里显示的不同。这是因为 `plotly.py` 试图在启动时自动检测适当的渲染程序。通过将可用的渲染器的名称分配给 `pio.renderers.default` 属性,可以更改默认渲染器。例如,要切换到`'browser'`渲染器,它会在默认 web 浏览器的选项卡中打开图,您将运行以下程序。\n", "\n", "```{note}\n", "默认渲染器在单个会话期间保持不变,但它们不会跨会话保持不变。如果您在 IPython 内核中工作,这意味着默认渲染器将在内核的生命周期中持久存在,但它们不会在内核重启时持久存在。\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "id": "017fdfe4", "metadata": {}, "outputs": [], "source": [ "import plotly.io as pio\n", "pio.renderers.default = \"browser\"" ] }, { "cell_type": "markdown", "id": "248e636d", "metadata": {}, "source": [ "也可以使用系统环境变量设置默认渲染器。在启动时,`plotly.py` 检查是否存在一个名为 `PLOTLY_RENDERER` 的环境变量。如果将此环境变量设置为可用渲染程序的名称,则将此渲染程序设置为默认设置。\n", "\n", "### 覆盖默认渲染器\n", "\n", "也可以通过将可用渲染器的名称作为 `renderer` 关键字参数传递给 `show()` 方法来临时覆盖默认渲染器。下面是一个使用 `svg` 渲染器(如下所述)显示图形而不更改默认渲染器的示例。" ] }, { "cell_type": "code", "execution_count": 6, "id": "3591b4f0", "metadata": {}, "outputs": [ { "data": { "image/svg+xml": [ "−0.500.511.522.500.511.522.53A Figure Displayed with the 'svg' Renderer" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displayed with the 'svg' Renderer\"\n", ")\n", "fig.show(renderer=\"svg\")" ] }, { "cell_type": "markdown", "id": "c9073136", "metadata": {}, "source": [ "## 内置的渲染器\n", "\n", "在本节中,我们将描述内置渲染器,以便您可以选择最适合您需要的渲染器。\n", "\n", "### 交互式渲染器\n", "\n", "交互式渲染器使用 `plotly.js` JavaScript 库显示图形,完全交互式,支持平移、缩放、悬停工具提示等。\n", "\n", "#### `notebook`\n", "\n", "这个渲染器是为了在经典的 [Jupyter Notebook](https://jupyter.org/install.html)(不是 JupyterLab)中使用。完整的 plotly.js JavaScript 库包会在第一次渲染图时被添加到笔记本中,所以这个渲染器可以在没有 Internet 连接的情况下工作。\n", "\n", "这个渲染器对于将被导出为 HTML 文件的笔记本是一个很好的选择(使用 [nbconvert](https://nbconvert.readthedocs.io/en/latest/) 或 \"Download as HTML\" 菜单动作),因为导出的 HTML 文件可以在没有互联网连接的情况下工作。\n", "\n", "```{tip}\n", "将 `plotly.js` 包添加到笔记本会使笔记本的大小增加几兆字节。如果您可以一直依赖于 Internet 连接,那么如果笔记本大小是一个限制,您可能需要考虑使用 `notebook_connected` 渲染器。\n", "```\n", "\n", "#### `notebook_connected`\n", "\n", "这个渲染器与 `notebook` 渲染器相同,除了 plotly.js JavaScript库 bundle 是从在线 CDN 位置加载的。这样可以节省几兆字节的笔记本大小,但为了显示以这种方式呈现的图,需要连接 Internet。\n", "\n", "对于将与 [nbviewer](https://nbviewer.jupyter.org/) 共享的笔记本来说,这个渲染器是一个很好的选择,因为用户首先必须有一个活跃的互联网连接来访问 nbviewer。\n", "\n", "#### `kaggle` 和 `azure`\n", "\n", "这些都是 `notebook_connected` 的别名,因为这个渲染器是 [Kaggle 内核](https://www.kaggle.com/docs/notebooks) 和 [Azure Notebook](https://notebooks.azure.com/) 的很好的选择。\n", "\n", "#### `colab`\n", "\n", "这是一个用于 [谷歌 Colab](https://colab.research.google.com) 的自定义渲染器。\n", "\n", "#### `browser`\n", "\n", "该渲染器将使用默认的 web 浏览器在浏览器选项卡中打开一个图。此渲染器只能在 Python 内核运行在与 web 浏览器相同的本地机器上时使用,因此它与 Jupyter Hub 或在线笔记本服务不兼容。\n", "\n", "```{note}\n", "1. 在这个上下文中,“默认浏览器”是由 Python [`webbrowser`](https://docs.python.org/3.7/library/webbrowser.html) 模块选择的浏览器。\n", "2. 浏览器渲染器通过在本地端口上设置一个单独使用的本地 web 服务器来工作。由于图形一旦发送给浏览器,web 服务器就会立即关闭,因此刷新浏览器将无法恢复图形。\n", "```\n", "\n", "#### `firefox`、`chrome` 和 `chromium`\n", "\n", "这些渲染器与浏览器渲染器相同,但是它们强制使用特定的浏览器。\n", "\n", "#### `iframe` 和 `iframe_connected`\n", "\n", "这些渲染器将图编写为独立的 HTML 文件,然后显示引用这些 HTML 文件的 [`iframe`](https://www.w3schools.com/html/html_iframe.asp) 元素。`iframe` 渲染器将包含 plotly.js JavaScript 包在每个被写的 HTML 文件中,而 `iframe_connected` 渲染器只包含一个在线 CDN 位置的引用,从那里加载 plotly.js。因此,`iframe_connected` 渲染器输出的文件比 `iframe` 渲染器小,但它需要 Internet 连接,而 `iframe` 渲染器可以脱机操作。\n", "\n", "这个渲染器在处理笔记本时可能比包含很多大图更有用。当使用 `notebook` 或 `notebook_connected` 渲染器时,一个笔记本中所有图的所有数据都内联存储在笔记本本身中。如果这将导致一个非常大的笔记本,可以使用 `iframe` 或 `iframe_connected` 渲染器代替。使用 `iframe` 渲染器,图形数据存储在单独的 HTML 文件中,而不是存储在笔记本本身中,从而使笔记本的大小更小。\n", "\n", "```{tip}\n", "`iframe` 渲染器编写的 HTML 文件存储在名为 `iframe_figures` 的子目录中。HTML 文件的名称是根据产生该图形的笔记本单元格的执行编号来命名的。这意味着每次重新启动笔记本内核时,之前的 HTML 文件都会被覆盖。这也意味着您不应该在同一个目录中使用 `iframe` 渲染器存储多个笔记本,因为这可能导致来自一个笔记本的数据覆盖来自另一个笔记本的数据。\n", "```\n", "\n", "#### `plotly_mimetype`\n", "\n", "`plotly_mimetype` 渲染器创建图形的规范(称为 MIME 类型包),并请求当前用户界面显示它。支持此渲染器的用户界面包括 [JupyterLab](https://jupyterlab.readthedocs.io/en/stable/)(需要 [`plotlywidget`](https://www.npmjs.com/package/plotlywidget) 扩展)、[nteract](https://nteract.io/) 和 Visual Studio Code [笔记本界面](https://code.visualstudio.com/docs/python/jupyter-support)。\n", "\n", "#### `jupyterlab`、`nteract` 和 `vscode`\n", "\n", "这些都是 `plotly_mimetype` 的别名,因为在使用 JupyterLab、nteract 和 Visual Studio Code 笔记本界面时,这个渲染器是一个很好的选择。注意,在 VSCode 笔记本中,Plotly.js 的版本是由 [vscode-python extension](https://code.visualstudio.com/docs/languages/python) 扩展提供的,通常会比最新版本晚几个星期,所以 `plotly` 的最新特性可能不会立即在 VSCode 中可用。Nteract 的情况类似。\n", "\n", "### 静态图像渲染器\n", "\n", "提供了一组渲染器,用于将图显示为静态图像。这些渲染器都依赖于 [orca](https://github.com/plotly/orca) 静态图像输出工具。请参阅[静态图像导出](plotly:static-image-export)页面以获得更多关于[orca]的设置信息。\n", "\n", "#### `png`、`jpeg` 和 `svg`\n", "\n", "这些渲染器分别将图形显示为静态的 `.png`、`.jpeg` 和 `.svg` 文件。这些渲染器对于不支持内联 HTML 输出但支持内联静态图像的用户界面非常有用。例子包括 [QtConsole](https://qtconsole.readthedocs.io/en/stable/)、[Spyder](https://www.spyder-ide.org/) 和 [PyCharm 笔记本界面](https://www.jetbrains.com/help/pycharm/jupyter-notebook-support.html)。" ] }, { "cell_type": "code", "execution_count": 7, "id": "4e803725", "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displayed with the 'png' Renderer\"\n", ")\n", "fig.show(renderer=\"png\")" ] }, { "cell_type": "markdown", "id": "bc16318b", "metadata": {}, "source": [ "#### PDF\n", "\n", "这个渲染器将图形显示为静态 PDF 文件。这对于将使用 [`nbconvert`](https://nbconvert.readthedocs.io/en/latest/) 的 LaTeX 导出功能导出为 PDF 文件的笔记本电脑特别有用。\n", "\n", "#### 其他杂项渲染器\n", "\n", "##### JSON\n", "\n", "在支持它的编辑器中(JupyterLab、nteract 和 Visual Studio Code 笔记本界面),这个渲染器以可折叠的交互式树结构显示图形的 JSON 表示形式。这对于检查复杂的结构是非常有用的。\n", "\n", "#### 多个渲染器\n", "\n", "您可以指定多个渲染器应该使用 `\"+\"` 字符连接它们的名称。当编写需要支持多个上下文的代码时,这很有用。例如,如果一个笔记本指定了一个默认的渲染器字符串 `\"notebook+plotly_mimetype+pdf\"`,那么这个笔记本将能够在经典的 Jupyter notebook 中运行,在 JupyterLab 中,并且它将支持使用 `nbconvert` 导出为 PDF。\n", "\n", "### 自定义内置渲染器\n", "\n", "大多数内置渲染器都有配置选项来定制它们的行为。要查看渲染器的描述,包括它的配置选项,可以在 `plotly.io.renderers` 配置对象上使用字典样式的键查找来访问渲染器对象,然后显示它。下面是一个访问和显示 `png` 渲染器的例子。" ] }, { "cell_type": "code", "execution_count": 8, "id": "d135ba6e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "PngRenderer(width=None, height=None, scale=None, engine='auto')\n", "\n", " Renderer to display figures as static PNG images. This renderer requires\n", " either the kaleido package or the orca command-line utility and is broadly\n", " compatible across IPython environments (classic Jupyter Notebook, JupyterLab,\n", " QtConsole, VSCode, PyCharm, etc) and nbconvert targets (HTML, PDF, etc.).\n", "\n", " mime type: 'image/png'\n", " " ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import plotly.io as pio\n", "png_renderer = pio.renderers[\"png\"]\n", "png_renderer" ] }, { "cell_type": "markdown", "id": "e19a01bd", "metadata": {}, "source": [ "从这个输出中,你可以看到 `png` 渲染器支持 3 个属性:`width`,`height` 和 `scale`。您可以通过向这些属性分配新值来自定义它们。\n", "\n", "下面是一个自定义 `png` 渲染器来更改结果图像大小的示例,将 `png` 渲染器设置为默认值,然后显示一个图。" ] }, { "cell_type": "code", "execution_count": 9, "id": "9c5535a9", "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.io as pio\n", "png_renderer = pio.renderers[\"png\"]\n", "png_renderer.width = 500\n", "png_renderer.height = 500\n", "\n", "pio.renderers.default = \"png\"\n", "\n", "import plotly.graph_objects as go\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displayed with the 'png' Renderer\"\n", ")\n", "fig.show()" ] }, { "cell_type": "markdown", "id": "80e0f2ca", "metadata": {}, "source": [ "您还可以通过将它们作为关键字参数传递给 `show()` 方法来临时覆盖渲染器参数的值。例如" ] }, { "cell_type": "code", "execution_count": 10, "id": "e4ccbe37", "metadata": {}, "outputs": [ { "data": { "image/png": "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" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import plotly.graph_objects as go\n", "\n", "fig = go.Figure(\n", " data=[go.Bar(y=[2, 1, 3])],\n", " layout_title_text=\"A Figure Displayed with the 'png' Renderer\"\n", ")\n", "fig.show(renderer=\"png\", width=800, height=300)" ] }, { "cell_type": "markdown", "id": "eb715365", "metadata": {}, "source": [ "## 使用 `ipywidgets` 显示图\n", "\n", "Plotly 图形可以使用 `plotly.graph_objects.FigureWidget` 对象在 [ipywidgets](https://ipywidgets.readthedocs.io/en/stable/) 上下文中显示。`FigureWidget` 是一个 figure graph 对象(就像 `plotly.graph_objects.Figure` 一样),因此您可以向它添加跟踪并像常规的 figure 一样更新它。但是 `FigureWidget` 也是一个 `ipywidgets` 对象,这意味着您可以将其与其他 `ipywidgets` 一起显示,从而在笔记本中构建用户界面。\n", "\n", "有关将 `plotly.py` 图与 `ipywidgets` 集成的更多信息,请参阅 [Plotly FigureWidget 概述](plotly:figurewidget)。\n", "\n", "```{important}\n", "`FigureWidget` 不使用上面讨论的渲染器框架,因此不应该在 `FigureWidget` 对象上使用 `show()` figure 方法或 `plotly.io.show` 函数。\n", "```" ] } ], "metadata": { "jupytext": { "formats": "md:myst", "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.10.3" } }, "kernelspec": { "display_name": "Python 3.10.4 ('tvmx': conda)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.4" }, "source_map": [ 13, 34, 41, 45, 52, 72, 78, 84, 87, 95, 98, 106, 113, 186, 193, 213, 217, 223, 237, 241, 249 ], "vscode": { "interpreter": { "hash": "e579259ee6098e2b9319de590d145b4b096774fe457bdf04260e3ba5c171e887" } } }, "nbformat": 4, "nbformat_minor": 5 }