{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Plotly Library Basics" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A look under the hood of the Plotly library" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "import plotly.graph_objs as go\n", "import plotly.express as px" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Difference between `plotly.graph_obj` and `plotly.express`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### `plotly.graph_obj` \n", "\n", "* Low-level syntax\n", "* Complex interface, data in the form of a dictionary\n", "* Complete control of all the details\n", "* Analogous to the `matplotlib` library\n", "\n", "### `plotly.express`\n", "\n", "* High-level syntax\n", "* Easy interface, data should be in a Pandas DataFrame\n", "* No control over some details\n", "* Analogous to the `seaborn` library" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## A simple scatter plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "df = pd.read_csv('Gapminder-mini.csv', sep=',')\n", "df" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = px.scatter(\n", " df, \n", " x='Income', \n", " y='Life expectancy',\n", " color='Region'\n", ")\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotly's internal representation of a static scatter plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "print(fig)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "fig.to_dict()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A dictionary with two parts:\n", "* data (contains all data-related information)\n", "* layout (contains all other information)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "f = {\n", " 'data': [{'hovertemplate': 'Region=Europe
Income=%{x}
Life expectancy=%{y}',\n", " 'legendgroup': 'Europe',\n", " 'marker': {'color': '#636efa', 'symbol': 'circle'},\n", " 'mode': 'markers',\n", " 'name': 'Europe',\n", " 'orientation': 'v',\n", " 'showlegend': True,\n", " 'type': 'scatter',\n", " 'x': [34735., 35373., 35739., 35816., 36084.],\n", " 'xaxis': 'x',\n", " 'y': [82.97, 83.17, 83.33, 83.49, 83.64],\n", " 'yaxis': 'y'},\n", " {'hovertemplate': 'Region=Africa
Income=%{x}
Life expectancy=%{y}',\n", " 'legendgroup': 'Africa',\n", " 'marker': {'color': '#EF553B', 'symbol': 'circle'},\n", " 'mode': 'markers',\n", " 'name': 'Africa',\n", " 'orientation': 'v',\n", " 'showlegend': True,\n", " 'type': 'scatter',\n", " 'x': [12246., 12233., 12143., 12039., 11986.],\n", " 'xaxis': 'x',\n", " 'y': [64.44, 66.31, 66.64, 66.93, 67.19],\n", " 'yaxis': 'y'}],\n", " 'layout': {'legend': {'title': {'text': 'Region'}, 'tracegroupgap': 0},\n", " 'margin': {'t': 60},\n", " 'xaxis': {'anchor': 'y', 'domain': [0.0, 1.0], 'title': {'text': 'Income'}},\n", " 'yaxis': {'anchor': 'x', 'domain': [0.0, 1.0], 'title': {'text': 'Life expectancy'}}}\n", "}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = go.Figure(f)\n", "fig.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plotly's internal representation of an animated scatter plot" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "fig = px.scatter(\n", " df, \n", " x='Income', \n", " y='Life expectancy',\n", " color='Region',\n", " animation_frame='Year'\n", ")\n", "fig.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": false }, "outputs": [], "source": [ "print(fig)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A more complex dictionary with three parts:\n", "* data (contains all data-related information for the initial frame)\n", "* frames (contains all data-related information for each frame (including the first one))\n", "* layout (contains all other information, including slider and buttons)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }