Skip to content

Instantly share code, notes, and snippets.

@adamnovotnycom
Created October 31, 2020 21:30
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adamnovotnycom/0d980a908a35732e9e55e8b1e8f27985 to your computer and use it in GitHub Desktop.
Save adamnovotnycom/0d980a908a35732e9e55e8b1e8f27985 to your computer and use it in GitHub Desktop.
google_100_carbon_free.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "google_100_carbon_free.ipynb",
"provenance": [],
"collapsed_sections": [],
"toc_visible": true,
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/excitedAtom/0d980a908a35732e9e55e8b1e8f27985/google_100_carbon_free.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "4f3CKqFUqL2-"
},
"source": [
"# Google 24/7 by 2030: Realizing a Carbon-free Future\n",
"Paper: https://www.gstatic.com/gumdrop/sustainability/247-carbon-free-energy.pdf"
]
},
{
"cell_type": "code",
"metadata": {
"id": "hbeJeHAoloR8",
"outputId": "7f29bc63-27cc-4e44-b4f7-27b72147b0ee",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"from google.colab import drive\n",
"drive.mount('/content/drive')"
],
"execution_count": 1,
"outputs": [
{
"output_type": "stream",
"text": [
"Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "qyW1JliPleN8",
"outputId": "dc0852ba-db5a-42d9-94f3-79f040545fe5",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"import json\n",
"import pandas as pd\n",
"import plotly.graph_objects as go\n",
"import requests\n",
"import sys\n",
"import time\n",
"print(sys.version)"
],
"execution_count": 2,
"outputs": [
{
"output_type": "stream",
"text": [
"3.6.9 (default, Oct 8 2020, 12:12:24) \n",
"[GCC 8.4.0]\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "Mc3jP-EPKGjY"
},
"source": [
"# import mysecrets.py which includes username, passwords, etc\n",
"sys.path.append(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free\")\n",
"import mysecrets"
],
"execution_count": 3,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "nGFsHX0PSHZ0"
},
"source": [
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n",
"def register(username, password, email, org):\n",
" url = 'https://api2.watttime.org/register'\n",
" params = {'username': username,\n",
" 'password': password,\n",
" 'email': email,\n",
" 'org': org}\n",
" rsp = requests.post(url, json=params)\n",
" print(rsp.text)"
],
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "E6GfVp0BSNMJ"
},
"source": [
"# ### Create WattTime account -> RUN ONCE\n",
"# register(mysecrets.user, mysecrets.pwd, mysecrets.email, mysecrets.org)"
],
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "AmsZpdB1Q1y0"
},
"source": [
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n",
"from requests.auth import HTTPBasicAuth\n",
"def login(username, password):\n",
" url = 'https://api2.watttime.org/login'\n",
" try:\n",
" rsp = requests.get(url, auth=HTTPBasicAuth(username, password))\n",
" except BaseException as e:\n",
" print('There was an error making your login request: {}'.format(e))\n",
" return None\n",
"\n",
" try:\n",
" token = rsp.json()['token']\n",
" except BaseException:\n",
" print('There was an error logging in. The message returned from the '\n",
" 'api is {}'.format(rsp.text))\n",
" return None\n",
"\n",
" return token"
],
"execution_count": 6,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "ndKOJ5UmSa0Z"
},
"source": [
"# source https://github.com/WattTime/apiv2-example/blob/master/query_apiv2.py\n",
"def real_time(token: str, latitude: float, longitude: float):\n",
" \"\"\"\n",
" returns:\n",
" percent: An integer between 0 (minimum MOER in the last two weeks \n",
" i.e. clean) and 100 (maximum MOER in the last two weeks i.e. dirty) \n",
" representing the relative realtime marginal emissions intensity.\n",
" \"\"\"\n",
" url = 'https://api2.watttime.org/index'\n",
" headers = {'Authorization': 'Bearer {}'.format(token)}\n",
" params = {\n",
" \"latitude\": latitude, \n",
" \"longitude\": longitude\n",
" }\n",
" rsp = requests.get(url, headers=headers, params=params)\n",
" return rsp.json()"
],
"execution_count": 7,
"outputs": []
},
{
"cell_type": "markdown",
"metadata": {
"id": "wQiYQGk33Pet"
},
"source": [
"#### Google data centers\n",
"https://www.google.com/about/datacenters/locations/"
]
},
{
"cell_type": "code",
"metadata": {
"id": "_BZ34pxa3R3m"
},
"source": [
"google_datacenters = {\n",
" \"Dalles_OR\": {\n",
" \"latitude\": 45.6280001,\n",
" \"longitude\": -121.2085228\n",
" },\n",
" \"Midlothian_TX\": {\n",
" \"latitude\": 32.4678977,\n",
" \"longitude\": -97.0643545\n",
" },\n",
" \"Douglas_County_GA\": {\n",
" \"latitude\": 33.6897026,\n",
" \"longitude\": -84.8850217\n",
" },\n",
" \"Berkeley_County_SC\": {\n",
" \"latitude\": 33.1638858,\n",
" \"longitude\": -80.1850489\n",
" },\n",
" \"Loudoun_County_VA\": {\n",
" \"latitude\": 39.0851461,\n",
" \"longitude\": -77.9250639\n",
" },\n",
" \"New_Albany_OH\": {\n",
" \"latitude\": 40.0849199,\n",
" \"longitude\": -82.8173774\n",
" },\n",
" \"Mayes_County_OK\": {\n",
" \"latitude\": 36.2924474,\n",
" \"longitude\": -95.3632184\n",
" }\n",
"}"
],
"execution_count": 8,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "Jn8q_UZ39tr0"
},
"source": [
"# ### create empty file to store real time data -> RUN ONCE\n",
"# with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"w\") as f:\n",
"# json.dump([], f)"
],
"execution_count": 9,
"outputs": []
},
{
"cell_type": "code",
"metadata": {
"id": "TG9ykfhuSbRm",
"outputId": "fcb85690-ed77-4cb9-ce78-d29e568f6674",
"colab": {
"base_uri": "https://localhost:8080/"
}
},
"source": [
"for _ in range(1):\n",
" token = login(mysecrets.user, mysecrets.pwd)\n",
" for dc_name in google_datacenters:\n",
" r_json = real_time(\n",
" token=token,\n",
" latitude=google_datacenters[dc_name][\"latitude\"], \n",
" longitude=google_datacenters[dc_name][\"longitude\"]\n",
" )\n",
" r_json[\"location\"] = dc_name\n",
" with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"r\") as f:\n",
" old_data = json.load(f)\n",
" with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"w\") as f:\n",
" new_data = old_data + [r_json]\n",
" json.dump(new_data, f)\n",
" # print(f\"Appended location {dc_name} @ {r_json['point_time']}\")\n",
" print(pd.DataFrame(new_data).tail(len(google_datacenters)))\n",
" print(f\"Sleeping... new dataset size {len(new_data)}\")\n",
" # time.sleep(600)"
],
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"text": [
" freq ba percent point_time location\n",
"336 300 BPA 78 2020-10-31T21:25:00Z Dalles_OR\n",
"337 300 ERCOT_NORTH 62 2020-10-31T21:25:00Z Midlothian_TX\n",
"338 300 SOCO 13 2020-10-31T21:25:00Z Douglas_County_GA\n",
"339 300 SCEG 26 2020-10-31T21:25:00Z Berkeley_County_SC\n",
"340 300 PJM_ATLANTIC 22 2020-10-31T21:20:00Z Loudoun_County_VA\n",
"341 300 PJM_WEST 43 2020-10-31T21:20:00Z New_Albany_OH\n",
"342 300 SPP_RZ4 85 2020-10-31T21:30:00Z Mayes_County_OK\n",
"Sleeping... new dataset size 343\n"
],
"name": "stdout"
}
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "5OgCl_RIxV0U"
},
"source": [
"## Analysis"
]
},
{
"cell_type": "code",
"metadata": {
"id": "fxLryPoNxXuM",
"outputId": "da3db79c-d2b8-4be8-8624-dc46657caad3",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 204
}
},
"source": [
"with open(\"/content/drive/My Drive/Colab Notebooks/google-100-carbon-free/datacenter.json\", \"r\") as f:\n",
" file_data = json.load(f)\n",
"df = pd.DataFrame(file_data)\n",
"df.head(5)"
],
"execution_count": 11,
"outputs": [
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>freq</th>\n",
" <th>ba</th>\n",
" <th>percent</th>\n",
" <th>point_time</th>\n",
" <th>location</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>300</td>\n",
" <td>BPA</td>\n",
" <td>70</td>\n",
" <td>2020-10-30T19:50:00Z</td>\n",
" <td>Dalles_OR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>300</td>\n",
" <td>ERCOT_NORTH</td>\n",
" <td>51</td>\n",
" <td>2020-10-30T19:50:00Z</td>\n",
" <td>Midlothian_TX</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>300</td>\n",
" <td>SOCO</td>\n",
" <td>31</td>\n",
" <td>2020-10-30T19:50:00Z</td>\n",
" <td>Douglas_County_GA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>300</td>\n",
" <td>SCEG</td>\n",
" <td>6</td>\n",
" <td>2020-10-30T19:50:00Z</td>\n",
" <td>Berkeley_County_SC</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>300</td>\n",
" <td>PJM_ATLANTIC</td>\n",
" <td>22</td>\n",
" <td>2020-10-30T19:45:00Z</td>\n",
" <td>Loudoun_County_VA</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" freq ba percent point_time location\n",
"0 300 BPA 70 2020-10-30T19:50:00Z Dalles_OR\n",
"1 300 ERCOT_NORTH 51 2020-10-30T19:50:00Z Midlothian_TX\n",
"2 300 SOCO 31 2020-10-30T19:50:00Z Douglas_County_GA\n",
"3 300 SCEG 6 2020-10-30T19:50:00Z Berkeley_County_SC\n",
"4 300 PJM_ATLANTIC 22 2020-10-30T19:45:00Z Loudoun_County_VA"
]
},
"metadata": {
"tags": []
},
"execution_count": 11
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "xP6U_X5qWCQ9",
"outputId": "1c6b30dc-96d5-4da9-fe56-0e9eb227adf6",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 306
}
},
"source": [
"df[\"point_time\"] = df[\"point_time\"].apply(\n",
" lambda x: pd.Timestamp(x)\n",
")\n",
"print(df.dtypes)\n",
"df = df.sort_values(by=\"point_time\", ascending=True)\n",
"df.head(5)"
],
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"text": [
"freq object\n",
"ba object\n",
"percent object\n",
"point_time datetime64[ns, UTC]\n",
"location object\n",
"dtype: object\n"
],
"name": "stdout"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>freq</th>\n",
" <th>ba</th>\n",
" <th>percent</th>\n",
" <th>point_time</th>\n",
" <th>location</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>300</td>\n",
" <td>PJM_ATLANTIC</td>\n",
" <td>22</td>\n",
" <td>2020-10-30 19:45:00+00:00</td>\n",
" <td>Loudoun_County_VA</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>300</td>\n",
" <td>PJM_WEST</td>\n",
" <td>7</td>\n",
" <td>2020-10-30 19:45:00+00:00</td>\n",
" <td>New_Albany_OH</td>\n",
" </tr>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>300</td>\n",
" <td>BPA</td>\n",
" <td>70</td>\n",
" <td>2020-10-30 19:50:00+00:00</td>\n",
" <td>Dalles_OR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>300</td>\n",
" <td>ERCOT_NORTH</td>\n",
" <td>51</td>\n",
" <td>2020-10-30 19:50:00+00:00</td>\n",
" <td>Midlothian_TX</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>300</td>\n",
" <td>SOCO</td>\n",
" <td>31</td>\n",
" <td>2020-10-30 19:50:00+00:00</td>\n",
" <td>Douglas_County_GA</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" freq ba percent point_time location\n",
"4 300 PJM_ATLANTIC 22 2020-10-30 19:45:00+00:00 Loudoun_County_VA\n",
"5 300 PJM_WEST 7 2020-10-30 19:45:00+00:00 New_Albany_OH\n",
"0 300 BPA 70 2020-10-30 19:50:00+00:00 Dalles_OR\n",
"1 300 ERCOT_NORTH 51 2020-10-30 19:50:00+00:00 Midlothian_TX\n",
"2 300 SOCO 31 2020-10-30 19:50:00+00:00 Douglas_County_GA"
]
},
"metadata": {
"tags": []
},
"execution_count": 12
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "JNrGS8sVEviY",
"outputId": "1e4327d7-19f5-464b-d829-8f37e50d7898",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 323
}
},
"source": [
"df = df.drop_duplicates(subset=[\"location\", \"point_time\"], keep=\"first\")\n",
"df.describe()"
],
"execution_count": 13,
"outputs": [
{
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:2: FutureWarning:\n",
"\n",
"Treating datetime data as categorical rather than numeric in `.describe` is deprecated and will be removed in a future version of pandas. Specify `datetime_is_numeric=True` to silence this warning and adopt the future behavior now.\n",
"\n"
],
"name": "stderr"
},
{
"output_type": "execute_result",
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>freq</th>\n",
" <th>ba</th>\n",
" <th>percent</th>\n",
" <th>point_time</th>\n",
" <th>location</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>293</td>\n",
" <td>293</td>\n",
" <td>293</td>\n",
" <td>293</td>\n",
" <td>293</td>\n",
" </tr>\n",
" <tr>\n",
" <th>unique</th>\n",
" <td>1</td>\n",
" <td>7</td>\n",
" <td>60</td>\n",
" <td>89</td>\n",
" <td>7</td>\n",
" </tr>\n",
" <tr>\n",
" <th>top</th>\n",
" <td>300</td>\n",
" <td>BPA</td>\n",
" <td>0</td>\n",
" <td>2020-10-30 21:15:00+00:00</td>\n",
" <td>Dalles_OR</td>\n",
" </tr>\n",
" <tr>\n",
" <th>freq</th>\n",
" <td>293</td>\n",
" <td>43</td>\n",
" <td>42</td>\n",
" <td>6</td>\n",
" <td>43</td>\n",
" </tr>\n",
" <tr>\n",
" <th>first</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2020-10-30 19:45:00+00:00</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" <tr>\n",
" <th>last</th>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>NaN</td>\n",
" <td>2020-10-31 21:30:00+00:00</td>\n",
" <td>NaN</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" freq ba percent point_time location\n",
"count 293 293 293 293 293\n",
"unique 1 7 60 89 7\n",
"top 300 BPA 0 2020-10-30 21:15:00+00:00 Dalles_OR\n",
"freq 293 43 42 6 43\n",
"first NaN NaN NaN 2020-10-30 19:45:00+00:00 NaN\n",
"last NaN NaN NaN 2020-10-31 21:30:00+00:00 NaN"
]
},
"metadata": {
"tags": []
},
"execution_count": 13
}
]
},
{
"cell_type": "code",
"metadata": {
"id": "sfk-PGWGFipW",
"outputId": "4596cd93-1b62-416c-f9b9-593df31fc5b4",
"colab": {
"base_uri": "https://localhost:8080/",
"height": 542
}
},
"source": [
"fig = go.Figure()\n",
"for dc_name in list(google_datacenters.keys()):\n",
" fig.add_trace(go.Scatter(\n",
" x=df.loc[df[\"location\"]==dc_name, \"point_time\"],\n",
" y=df.loc[df[\"location\"]==dc_name, \"percent\"],\n",
" name=dc_name,\n",
" line_shape=\"vh\"\n",
" ))\n",
"fig.update_layout(\n",
" title=\"Marginal Operating Emissions Rates (MOER) of Select Google Data Centers\",\n",
" xaxis_title=\"Day and Time\",\n",
" yaxis_title=\"MOER (0 = clean, 100 = max emissions)\"\n",
")\n",
"fig.show()"
],
"execution_count": 14,
"outputs": [
{
"output_type": "display_data",
"data": {
"text/html": [
"<html>\n",
"<head><meta charset=\"utf-8\" /></head>\n",
"<body>\n",
" <div>\n",
" <script src=\"https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_SVG\"></script><script type=\"text/javascript\">if (window.MathJax) {MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}</script>\n",
" <script type=\"text/javascript\">window.PlotlyConfig = {MathJaxConfig: 'local'};</script>\n",
" <script src=\"https://cdn.plot.ly/plotly-latest.min.js\"></script> \n",
" <div id=\"a2b923c3-c485-47b8-b975-37250c5513c7\" class=\"plotly-graph-div\" style=\"height:525px; width:100%;\"></div>\n",
" <script type=\"text/javascript\">\n",
" \n",
" window.PLOTLYENV=window.PLOTLYENV || {};\n",
" \n",
" if (document.getElementById(\"a2b923c3-c485-47b8-b975-37250c5513c7\")) {\n",
" Plotly.newPlot(\n",
" 'a2b923c3-c485-47b8-b975-37250c5513c7',\n",
" [{\"line\": {\"shape\": \"vh\"}, \"name\": \"Dalles_OR\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:20:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"70\", \"69\", \"60\", \"56\", \"56\", \"56\", \"55\", \"65\", \"62\", \"61\", \"56\", \"56\", \"44\", \"37\", \"47\", \"54\", \"56\", \"65\", \"70\", \"67\", \"64\", \"61\", \"58\", \"58\", \"60\", \"61\", \"61\", \"61\", \"61\", \"61\", \"61\", \"62\", \"61\", \"62\", \"62\", \"63\", \"78\", \"77\", \"75\", \"77\", \"77\", \"78\", \"78\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Midlothian_TX\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"51\", \"62\", \"70\", \"65\", \"62\", \"62\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"45\", \"77\", \"45\", \"77\", \"77\", \"45\", \"45\", \"45\", \"45\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"77\", \"87\", \"59\", \"25\", \"49\", \"48\", \"49\", \"48\", \"62\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Douglas_County_GA\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:45:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:20:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"31\", \"34\", \"5\", \"31\", \"31\", \"31\", \"23\", \"23\", \"23\", \"23\", \"21\", \"21\", \"21\", \"11\", \"11\", \"11\", \"23\", \"10\", \"13\", \"13\", \"13\", \"13\", \"13\", \"13\", \"13\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"14\", \"13\", \"13\", \"13\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Berkeley_County_SC\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:50:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:20:00+00:00\", \"2020-10-31T01:35:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:35:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:15:00+00:00\", \"2020-10-31T12:55:00+00:00\", \"2020-10-31T13:05:00+00:00\", \"2020-10-31T13:15:00+00:00\", \"2020-10-31T13:25:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:05:00+00:00\", \"2020-10-31T16:55:00+00:00\", \"2020-10-31T17:05:00+00:00\", \"2020-10-31T17:15:00+00:00\", \"2020-10-31T17:25:00+00:00\", \"2020-10-31T17:35:00+00:00\", \"2020-10-31T17:45:00+00:00\", \"2020-10-31T17:55:00+00:00\", \"2020-10-31T18:05:00+00:00\", \"2020-10-31T18:15:00+00:00\", \"2020-10-31T18:25:00+00:00\", \"2020-10-31T18:35:00+00:00\", \"2020-10-31T18:45:00+00:00\", \"2020-10-31T18:55:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:30:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:50:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:40:00+00:00\", \"2020-10-31T20:50:00+00:00\", \"2020-10-31T21:00:00+00:00\", \"2020-10-31T21:25:00+00:00\"], \"y\": [\"6\", \"4\", \"8\", \"12\", \"12\", \"12\", \"51\", \"51\", \"51\", \"52\", \"52\", \"53\", \"52\", \"54\", \"54\", \"54\", \"42\", \"43\", \"38\", \"23\", \"24\", \"24\", \"24\", \"24\", \"24\", \"25\", \"25\", \"25\", \"25\", \"25\", \"25\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"27\", \"26\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Loudoun_County_VA\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:45:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:05:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:50:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T14:50:00+00:00\", \"2020-10-31T15:00:00+00:00\", \"2020-10-31T16:50:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:25:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:45:00+00:00\", \"2020-10-31T20:20:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:20:00+00:00\"], \"y\": [\"22\", \"22\", \"14\", \"12\", \"12\", \"12\", \"12\", \"14\", \"14\", \"14\", \"25\", \"14\", \"14\", \"14\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\", \"22\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"New_Albany_OH\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:45:00+00:00\", \"2020-10-30T21:15:00+00:00\", \"2020-10-31T00:00:00+00:00\", \"2020-10-31T01:05:00+00:00\", \"2020-10-31T01:10:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:30:00+00:00\", \"2020-10-31T11:30:00+00:00\", \"2020-10-31T11:40:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:00:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:50:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T14:50:00+00:00\", \"2020-10-31T15:00:00+00:00\", \"2020-10-31T16:50:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:15:00+00:00\", \"2020-10-31T19:25:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:45:00+00:00\", \"2020-10-31T20:20:00+00:00\", \"2020-10-31T20:25:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:20:00+00:00\"], \"y\": [\"7\", \"7\", \"29\", \"80\", \"80\", \"73\", \"73\", \"86\", \"70\", \"62\", \"70\", \"62\", \"62\", \"86\", \"22\", \"7\", \"7\", \"22\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"7\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\", \"43\"]}, {\"line\": {\"shape\": \"vh\"}, \"name\": \"Mayes_County_OK\", \"type\": \"scatter\", \"x\": [\"2020-10-30T19:55:00+00:00\", \"2020-10-30T21:20:00+00:00\", \"2020-10-31T00:05:00+00:00\", \"2020-10-31T01:15:00+00:00\", \"2020-10-31T01:25:00+00:00\", \"2020-10-31T01:40:00+00:00\", \"2020-10-31T11:35:00+00:00\", \"2020-10-31T11:50:00+00:00\", \"2020-10-31T11:55:00+00:00\", \"2020-10-31T12:05:00+00:00\", \"2020-10-31T12:10:00+00:00\", \"2020-10-31T12:20:00+00:00\", \"2020-10-31T13:00:00+00:00\", \"2020-10-31T13:10:00+00:00\", \"2020-10-31T13:20:00+00:00\", \"2020-10-31T13:30:00+00:00\", \"2020-10-31T14:55:00+00:00\", \"2020-10-31T15:10:00+00:00\", \"2020-10-31T17:00:00+00:00\", \"2020-10-31T17:10:00+00:00\", \"2020-10-31T17:20:00+00:00\", \"2020-10-31T17:30:00+00:00\", \"2020-10-31T17:40:00+00:00\", \"2020-10-31T17:50:00+00:00\", \"2020-10-31T18:00:00+00:00\", \"2020-10-31T18:10:00+00:00\", \"2020-10-31T18:20:00+00:00\", \"2020-10-31T18:30:00+00:00\", \"2020-10-31T18:40:00+00:00\", \"2020-10-31T18:50:00+00:00\", \"2020-10-31T19:00:00+00:00\", \"2020-10-31T19:20:00+00:00\", \"2020-10-31T19:35:00+00:00\", \"2020-10-31T19:40:00+00:00\", \"2020-10-31T19:55:00+00:00\", \"2020-10-31T20:30:00+00:00\", \"2020-10-31T20:35:00+00:00\", \"2020-10-31T20:45:00+00:00\", \"2020-10-31T20:55:00+00:00\", \"2020-10-31T21:05:00+00:00\", \"2020-10-31T21:25:00+00:00\", \"2020-10-31T21:30:00+00:00\"], \"y\": [\"92\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"0\", \"80\", \"92\", \"85\", \"0\", \"0\", \"0\", \"94\", \"0\", \"0\", \"0\", \"94\", \"96\", \"0\", \"0\", \"0\", \"94\", \"0\", \"0\", \"97\", \"81\", \"80\", \"81\", \"80\", \"87\", \"80\", \"85\"]}],\n",
" {\"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.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.0, \"#f0f921\"]], \"type\": \"contour\"}], \"contourcarpet\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"contourcarpet\"}], \"heatmap\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.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.0, \"#f0f921\"]], \"type\": \"heatmap\"}], \"heatmapgl\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.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.0, \"#f0f921\"]], \"type\": \"heatmapgl\"}], \"histogram\": [{\"marker\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"histogram\"}], \"histogram2d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.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.0, \"#f0f921\"]], \"type\": \"histogram2d\"}], \"histogram2dcontour\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"colorscale\": [[0.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.0, \"#f0f921\"]], \"type\": \"histogram2dcontour\"}], \"mesh3d\": [{\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}, \"type\": \"mesh3d\"}], \"parcoords\": [{\"line\": {\"colorbar\": {\"outlinewidth\": 0, \"ticks\": \"\"}}, \"type\": \"parcoords\"}], \"pie\": [{\"automargin\": true, \"type\": \"pie\"}], \"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.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.0, \"#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}, \"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.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.0, \"#f0f921\"]], \"sequentialminus\": [[0.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.0, \"#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\": \"Marginal Operating Emissions Rates (MOER) of Select Google Data Centers\"}, \"xaxis\": {\"title\": {\"text\": \"Day and Time\"}}, \"yaxis\": {\"title\": {\"text\": \"MOER (0 = clean, 100 = max emissions)\"}}},\n",
" {\"responsive\": true}\n",
" ).then(function(){\n",
" \n",
"var gd = document.getElementById('a2b923c3-c485-47b8-b975-37250c5513c7');\n",
"var x = new MutationObserver(function (mutations, observer) {{\n",
" var display = window.getComputedStyle(gd).display;\n",
" if (!display || display === 'none') {{\n",
" console.log([gd, 'removed!']);\n",
" Plotly.purge(gd);\n",
" observer.disconnect();\n",
" }}\n",
"}});\n",
"\n",
"// Listen for the removal of the full notebook cells\n",
"var notebookContainer = gd.closest('#notebook-container');\n",
"if (notebookContainer) {{\n",
" x.observe(notebookContainer, {childList: true});\n",
"}}\n",
"\n",
"// Listen for the clearing of the current output cell\n",
"var outputEl = gd.closest('.output');\n",
"if (outputEl) {{\n",
" x.observe(outputEl, {childList: true});\n",
"}}\n",
"\n",
" })\n",
" };\n",
" \n",
" </script>\n",
" </div>\n",
"</body>\n",
"</html>"
]
},
"metadata": {
"tags": []
}
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment