Download notebook (.ipynb)

Unemployment in the US since 1967#

from datetime import datetime

import pandas as pd

from lets_plot import *
LetsPlot.setup_html()
presidential_df = pd.read_csv("https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/presidential.csv", parse_dates=["start", "end"])
economics_df = pd.read_csv("https://raw.githubusercontent.com/JetBrains/lets-plot-docs/master/data/economics.csv", parse_dates=["date"])
breaks = [2.5, 5, 10]

ggplot() + \
    geom_band(aes(xmin="start", xmax="end", fill="party"), data=presidential_df, \
              size=0, alpha=.4) + \
    geom_label(aes("start", label="name", color="party"), 
               data=presidential_df, 
               y=4000, alpha=0.6, 
               angle=90,
               vjust=1, show_legend=False) + \
    geom_line(aes("date", "unemploy"), data=economics_df) + \
    scale_y_continuous("Unemployment (x\(10^3\))", trans='log10', \
                       breaks=[b*10**3 for b in breaks], labels=[str(b) for b in breaks]) + \
    scale_fill_discrete(name="") + \
    coord_cartesian(xlim=[datetime(1966, 1, 1), datetime(2016, 1, 1)]) + \
    xlab("Year") + \
    guides(fill=guide_legend(override_aes={'alpha': 0.4, 'color': 'paper'})) + \
    ggsize(1000, 400) + \
    ggtitle("Unemployment in the US", "1967 to 2015") + \
    theme(legend_position='top', plot_title=element_text(size=18, face='bold'))
---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\IPython\core\formatters.py:402, in BaseFormatter.__call__(self, obj)
    400     pass
    401 else:
--> 402     return printer(obj)
    403 # Finally look for special method names
    404 method = get_real_method(obj, self.print_method)

File ~\.ipython\profile_default\startup\50-lets-plot-hook.py:21, in lets_plot_repr_hook(plot)
     20 def lets_plot_repr_hook(plot):
---> 21     plot_html = plot._repr_html_()
     23     if not ipython.db.get(ENABLE_COPY_SPEC_BUTTON_KEY, True):
     24         return plot_html  # Return only the plot, no button

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\plot\core.py:502, in PlotSpec._repr_html_(self)
    499 def _repr_html_(self):
    500     # Special method discovered and invoked by IPython.display.display.
    501     from ..frontend_context._configuration import _as_html
--> 502     return _as_html(self.as_dict())

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\frontend_context\_configuration.py:140, in _as_html(plot_spec)
    132         return """\
    133         <div style="color:darkred;">
    134             Lets-plot `html` is not configured.<br>
    135             Try to use `LetsPlot.setup_html()` before first occurrence of plot.
    136         </div>
    137         """
    139 # Generate "display" HTML
--> 140 return ctx.as_str(plot_spec)

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\frontend_context\_jupyter_notebook_ctx.py:75, in JupyterNotebookContext.as_str(self, plot_spec)
     72 if self.height is not None:
     73     sizing_options['height'] = self.height
---> 75 return kbr._generate_display_html_for_raw_spec(
     76     plot_spec,
     77     sizing_options,
     78     dynamic_script_loading=True,  # True for Jupyter Notebook, JupyterLab
     79     force_immediate_render=self.force_immediate_render,
     80     responsive=self.responsive,
     81     height100pct=self.height100pct
     82 )

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_kbridge.py:188, in _generate_display_html_for_raw_spec(plot_spec, sizing_options, dynamic_script_loading, force_immediate_render, responsive, height100pct)
    112 def _generate_display_html_for_raw_spec(
    113         plot_spec: Dict,
    114         sizing_options: Dict,
   (...)
    119         height100pct: bool = False
    120 ) -> str:
    121     """
    122     Generate HTML for displaying a plot from 'raw' specification (not processed by plot backend)
    123     with customizable options.
   (...)
    186 
    187     """
--> 188     plot_spec = _standardize_plot_spec(plot_spec)
    189     sizing_options = standardize_dict(sizing_options)
    190     return lets_plot_kotlin_bridge.get_display_html_for_raw_spec(
    191         plot_spec,
    192         sizing_options,
   (...)
    196         height100pct
    197     )

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_kbridge.py:96, in _standardize_plot_spec(plot_spec)
     93 if not isinstance(plot_spec, dict):
     94     raise ValueError("dict expected but was {}".format(type(plot_spec)))
---> 96 return standardize_dict(plot_spec)

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:42, in standardize_dict(value)
     40 result = {}
     41 for k, v in value.items():
---> 42     result[_standardize_value(k)] = _standardize_value(v)
     44 return result

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:91, in _standardize_value(v)
     89     return float(v)
     90 if is_dict_or_dataframe(v):
---> 91     return standardize_dict(v)
     92 if is_polars_dataframe(v):
     93     return standardize_dict(v.to_dict(as_series=False))

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:42, in standardize_dict(value)
     40 result = {}
     41 for k, v in value.items():
---> 42     result[_standardize_value(k)] = _standardize_value(v)
     44 return result

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:95, in _standardize_value(v)
     93     return standardize_dict(v.to_dict(as_series=False))
     94 if isinstance(v, list):
---> 95     return [_standardize_value(elem) for elem in v]
     96 if isinstance(v, tuple):
     97     return tuple(_standardize_value(elem) for elem in v)

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:95, in <listcomp>(.0)
     93     return standardize_dict(v.to_dict(as_series=False))
     94 if isinstance(v, list):
---> 95     return [_standardize_value(elem) for elem in v]
     96 if isinstance(v, tuple):
     97     return tuple(_standardize_value(elem) for elem in v)

File D:\miniconda3\envs\lets-plot-docs\lib\site-packages\lets_plot\_type_utils.py:114, in _standardize_value(v)
    110     return None
    112 if isinstance(v, datetime):
    113     # Datetime: to milliseconds since epoch (time zone aware)
--> 114     return v.timestamp() * 1000
    115 if isinstance(v, date):
    116     # Local date: to milliseconds since epoch (midnight UTC)
    117     return datetime.combine(v, time.min, tzinfo=timezone.utc).timestamp() * 1000

OSError: [Errno 22] Invalid argument
<lets_plot.plot.core.PlotSpec at 0x13d170a20e0>