{
"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": [
"