{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" }, "toc": { "toc_cell": false, "toc_number_sections": true, "toc_threshold": 6, "toc_window_display": false }, "colab": { "name": "kp_py_diagram_plotly.ipynb", "provenance": [], "collapsed_sections": [], "include_colab_link": true } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "id": "K-dbG-oOcCWH", "colab_type": "text" }, "source": [ "# Ábrakészítés a plotly modul segítségével\n", "\n", "Az ábrakészítéshez természetesen az eddig használt [matplotlib](http://matplotlib.org/) modul mellett számos másik függvénycsomag is létezik. A lent röviden bemutatott [plotly](https://plot.ly/) modul előnye, hogy az alapbeállításokat használva is [elegáns és interaktív](https://plot.ly/feed/) ábrákat tudunk készíteni.\n", "\n", "A plotly szintaxisa az eddigiektől azonban némiképp eltér, ennek a rövid bemutatására törekszünk néhány példán keresztül." ] }, { "cell_type": "markdown", "metadata": { "id": "IfurK5BAcCWJ", "colab_type": "text" }, "source": [ "## A plotly offline és online üzemmódja\n", "\n", "A plotly alapvetően egy webes felület, melyen egy ingyenes regisztráció és bejelentkezés után mindenkinek lehetősége nyílik adatok feltöltésére, azok feldolgozására interaktív ábrák formájában, majd a legyártott ábrák megosztására. Ez a módszer jelentősen megkönnyítheti egy csoporton belül a kollaborációt, hiszen a csoporttagok nemcsak az ábrákhoz férnek hozzá, hanem magukhoz az adatokhoz és az ábrákat legyártó kódrészletekhez is. Így ha valaki csak a vonalak színét szeretné egy ábrán megváltoztatni, nem kell e-mailben megkérnie az ábra eredeti gyártóját, hogy ezt tegye meg, hanem a kód átírásával saját maga is megoldhatja.\n", "\n", "Néha azonban a vizsgált adatok természetüknél fogva nem tölthetők fel egy publikus tárhelyre, a privát tárhely használatához pedig Pro accountra van szükség, ami értelemszerűen nem ingyenes. Gyakran előfordul olyan probléma is, hogy a feldolgozni kívánt adatfájlok annyira nagyok, hogy feltöltésük (illetve bármilyen mozgatásuk) nem praktikus. Ilyen és ehhez hasonló esetekben szükség lenne egy \"lokális\" ábrakészítő opcióra, mellyel nem az adatok mennek a plotlyhoz, hanem a plotly jön az adatokhoz. Ennek a megoldására készült a [Plotly Offline](https://plot.ly/python/offline/) verziója, mellyel az ábrák és adatok nem egy központi szerveren tárolódnak, hanem a lokális gépen, illetve notebookban. A lenti példákban ezt az offline verziót használjuk.\n", "\n", "(A plotly ábrák generálása emellett nemcsak a mostanra megszokott Python nyelven lehetséges, hanem akár R-ben vagy JavaScriptben is. Ezekről az alábbiakban nem ejtünk szót.)" ] }, { "cell_type": "markdown", "metadata": { "id": "W8jo-mMkcCWJ", "colab_type": "text" }, "source": [ "### A plotly modul importálása és az offline verzió függvényeinek betöltése" ] }, { "cell_type": "code", "metadata": { "id": "zBeobwn2cCWK", "colab_type": "code", "colab": {}, "outputId": "8fa5b4d6-2618-4db2-e8b0-b93d6f75305c" }, "source": [ "from plotly import *\n", "from plotly.offline import *\n", "init_notebook_mode()" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "text/html": [ " \n", " " ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "x_ow6-tqcCWR", "colab_type": "text" }, "source": [ "### Egyéb hasznos, már ismert modulok importálása" ] }, { "cell_type": "code", "metadata": { "id": "SyPdrL71cCWS", "colab_type": "code", "colab": {} }, "source": [ "import numpy as np" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "pB8sBqMpcCWU", "colab_type": "text" }, "source": [ "## Egyszerű ábra készítése" ] }, { "cell_type": "markdown", "metadata": { "id": "hHr0RP94cCWU", "colab_type": "text" }, "source": [ "### Adatok gyártása\n", "\n", "Mint ahogy a matplotlib modulnál is láttuk, minden ábra generálásához elsőként az adatok betöltésére vagy legyártására van szükség. Nézzük a szokásos példánkat: ábrázoljuk a sin(x) függvényt 0 és 2π között." ] }, { "cell_type": "code", "metadata": { "id": "Dgp2_8MVcCWV", "colab_type": "code", "colab": {} }, "source": [ "x_pontok = np.linspace(0,2*np.pi,10)\n", "y_pontok = np.sin(x_pontok)" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "QXquo16ccCWX", "colab_type": "text" }, "source": [ "### Az ábra elkészítése\n", "\n", "A plotly kicsit másképp viselkedik, mint amit a matplotlib-nél láttunk. Itt egy ábrát alapvetően különféle objektumokkal és egymásba ágyazott `dict`-ekkel definiálhatunk. Az ábra minden egyes jellemzőjéhez (pl. színek, rács, az adatok, stb.) tartozik egy kulcs-érték páros.\n", "\n", "Ezeket a jellemzőket a plotly két kategóriába sorolja, a `trace`-ekbe és a `layout`-ba. A `trace`-ek olyan objektumok, melyek egy adatsort írnak le az ábrán, például egy Scatter vagy egy Heatmap objektum. Egy ábrán természetesen több `trace` is lehet, ha például kétféle adatsort is ábrázolni szeretnénk. A `trace`-ek emellett ábrákon belül is kombinálhatók, egyetlen ábrán megjeleníthetünk elszórt mérési pontokat és oszlopdiagramot is. A `layout` jellemzők pedig az ábra egészére vonatkozó formázási utasítások, például az ábra címe, a háttér színe, a tengelyfeliratok, illetve további annotációk (szövegek).\n", "\n", "Az ábrakészítésben a [plotly dokumentációja](https://plot.ly/python/reference/) sok segítséget ad.\n", "\n", "---\n", "\n", "\n", "**1. `Trace`-ek legyártása**\n", "\n", "Egy ábra definiálásakor tehát elsőként az adatokból le kell gyártanunk a megfelelő `trace`-eket. A konkrét példában egy olyan ábrát szeretnénk, ahol a fenti `y_pontok` array az `x_pontok` array függvényében van ábrázolva, és a pontok folytonos vonallal vannak összekötve. Ezt az alábbi utasítással tehetjük meg:" ] }, { "cell_type": "code", "metadata": { "id": "qlIoZLzlcCWX", "colab_type": "code", "colab": {}, "outputId": "dd5bc38c-5b10-42dc-e441-8904b43612f4" }, "source": [ "trace_sin_gorbe = graph_objs.Scatter(x=x_pontok, y=y_pontok, mode='lines')\n", "trace_sin_gorbe" ], "execution_count": 0, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Scatter({\n", " 'mode': 'lines',\n", " 'x': array([0. , 0.6981317 , 1.3962634 , 2.0943951 , 2.7925268 , 3.4906585 ,\n", " 4.1887902 , 4.88692191, 5.58505361, 6.28318531]),\n", " 'y': array([ 0.00000000e+00, 6.42787610e-01, 9.84807753e-01, 8.66025404e-01,\n", " 3.42020143e-01, -3.42020143e-01, -8.66025404e-01, -9.84807753e-01,\n", " -6.42787610e-01, -2.44929360e-16])\n", "})" ] }, "metadata": { "tags": [] }, "execution_count": 4 } ] }, { "cell_type": "markdown", "metadata": { "id": "ZD4nmFF8cCWZ", "colab_type": "text" }, "source": [ "Itt tehát legyártottunk egy \"gráf objektumot\", mely most éppen `Scatter` típusú. A kiíratásból láthatjuk, hogy bár ezt mint egy objektumot definiáltuk, valójában egy olyan `dict`, melyben a `'type'` kulcshoz a `'scatter'` érték tartozik. Tehát tulajdonképpen az alábbi módszer is működne a fenti `trace` definiálására, az objektumként való megadás csak a kényelmünket szolgálja." ] }, { "cell_type": "code", "metadata": { "id": "OeOu1ZpacCWa", "colab_type": "code", "colab": {} }, "source": [ "trace_sin_gorbe = {'mode': 'lines',\n", " 'type' : 'scatter',\n", " 'x': x_pontok,\n", " 'y': y_pontok}" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "ihhoS4P7cCWc", "colab_type": "text" }, "source": [ "Arra viszont figyeljünk, hogy ha a `dict`-ként való megadást választjuk, akkor a kulcs-érték párokat kettősponttal válasszuk el, a gráf objektumként való megadás esetén pedig egyenlőségjellel.\n", "\n", "A `mode` kulcshoz írt `'lines'` azt jelenti, hogy az adatpontokat vonallal szeretnénk az ábrán összekötni. Ha csak be szeretnénk szórni a pontokat az ábrára, akkor ide írjuk a `'markers'` kifejezést.\n", "\n", "Végül tegyük be az `adatok_sin_gorbe` listába a legyártott `trace` objektumokat. Mivel ebben a példában csak egyetlen `trace`-re volt szükség, így ez elhagyható lenne, de több `trace` esetén az összeset célszerű egy listába összefűzni:" ] }, { "cell_type": "code", "metadata": { "id": "9WrmRXVCcCWc", "colab_type": "code", "colab": {} }, "source": [ "adatok_sin_gorbe = [trace_sin_gorbe]" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "WebT7KItcCWe", "colab_type": "text" }, "source": [ "---\n", "\n", "**2. A `layout` definiálása**\n", "\n", "Adjunk az ábránknak címet, a tengelyekre pedig rakjunk tengelyfeliratot. Ezt a `Layout` objektum specifikálásával tehetjük meg az alábbiak szerint:" ] }, { "cell_type": "code", "metadata": { "id": "ILlASoVvcCWe", "colab_type": "code", "colab": {}, "outputId": "2ae27998-4e05-4d5a-f01f-16562f502b2f" }, "source": [ "layout_sin_gorbe = graph_objs.Layout(title='Ez az ábra címe',\n", " xaxis=graph_objs.XAxis(title='x'), \n", " yaxis=graph_objs.YAxis(title='sin(x)'))\n", "layout_sin_gorbe" ], "execution_count": 0, "outputs": [ { "output_type": "stream", "text": [ "C:\\Users\\User\\Anaconda3\\lib\\site-packages\\plotly\\graph_objs\\_deprecations.py:550: DeprecationWarning:\n", "\n", "plotly.graph_objs.XAxis is deprecated.\n", "Please replace it with one of the following more specific types\n", " - plotly.graph_objs.layout.XAxis\n", " - plotly.graph_objs.layout.scene.XAxis\n", "\n", "\n", "C:\\Users\\User\\Anaconda3\\lib\\site-packages\\plotly\\graph_objs\\_deprecations.py:578: DeprecationWarning:\n", "\n", "plotly.graph_objs.YAxis is deprecated.\n", "Please replace it with one of the following more specific types\n", " - plotly.graph_objs.layout.YAxis\n", " - plotly.graph_objs.layout.scene.YAxis\n", "\n", "\n" ], "name": "stderr" }, { "output_type": "execute_result", "data": { "text/plain": [ "Layout({\n", " 'title': {'text': 'Ez az ábra címe'}, 'xaxis': {'title': {'text': 'x'}}, 'yaxis': {'title': {'text': 'sin(x)'}}\n", "})" ] }, "metadata": { "tags": [] }, "execution_count": 7 } ] }, { "cell_type": "markdown", "metadata": { "id": "7bcA9G6fcCWg", "colab_type": "text" }, "source": [ "A `Layout` objektum `xaxis` változója egy `XAxis` objektum, melyben már a `title` változó értéke közvetlenül megadható. Hasonlóan járunk az `yaxis` változó esetén is. Látjuk azonban, hogy csakúgy mint a `trace` esetén, ezek az objektumok itt is helyettesíthetők egymásba ágyazott `dict`-ekkel:" ] }, { "cell_type": "code", "metadata": { "id": "iQIPAYx0cCWh", "colab_type": "code", "colab": {} }, "source": [ "layout_sin_gorbe = {'title': 'Ez az ábra címe',\n", " 'xaxis': {'title': 'x'},\n", " 'yaxis': {'title': 'sin(x)'}}" ], "execution_count": 0, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "_jV0z3dycCWj", "colab_type": "text" }, "source": [ "---\n", "\n", "**3. A `Figure` objektum legyártása**\n", "\n", "Miután az összes szükséges objektum elkészült (az adatokhoz a megfelelő `trace`-ek, az ábra formázásához pedig a `Layout`), ezeket összefűzve definiálhatjuk a `Figure` objektumot:" ] }, { "cell_type": "code", "metadata": { "id": "DW1hGTo_cCWj", "colab_type": "code", "colab": {}, "outputId": "ed07c60a-82d5-405b-9163-4315e30553fd" }, "source": [ "figure_sin_gorbe = graph_objs.Figure(data=adatok_sin_gorbe, layout=layout_sin_gorbe)\n", "figure_sin_gorbe" ], "execution_count": 0, "outputs": [ { "output_type": "display_data", "data": { "application/vnd.plotly.v1+json": { "config": { "plotlyServerURL": "https://plot.ly" }, "data": [ { "mode": "lines", "type": "scatter", "x": [ 0, 0.6981317007977318, 1.3962634015954636, 2.0943951023931953, 2.792526803190927, 3.490658503988659, 4.1887902047863905, 4.886921905584122, 5.585053606381854, 6.283185307179586 ], "y": [ 0, 0.6427876096865393, 0.984807753012208, 0.8660254037844387, 0.3420201433256689, -0.34202014332566866, -0.8660254037844385, -0.9848077530122081, -0.6427876096865396, -2.4492935982947064e-16 ] } ], "layout": { "template": { "data": { "bar": [ { "error_x": { "color": "#2a3f5f" }, "error_y": { "color": "#2a3f5f" }, "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "type": "bar" } ], "barpolar": [ { "marker": { "line": { "color": "#E5ECF6", "width": 0.5 } }, "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": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "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" } ], "scatter": [ { "marker": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "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 }, "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": "", "zerolinecolor": "white", "zerolinewidth": 2 }, "yaxis": { "automargin": true, "gridcolor": "white", "linecolor": "white", "ticks": "", "zerolinecolor": "white", "zerolinewidth": 2 } } }, "title": { "text": "Ez az ábra címe" }, "xaxis": { "title": { "text": "x" } }, "yaxis": { "title": { "text": "sin(x)" } } } }, "text/html": [ "