matplotlib + Ibis

If you don’t have data to visualize, you can load an example table:

Code
import ibis import ibis.selectors as s  ibis.options.interactive = True  t = ibis.examples.penguins.fetch() t.head(3)
┏━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━┓ ┃ species  island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g  sex  year ┃ ┡━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━┩ │ stringstringfloat64float64int64int64stringint64 │ ├─────────┼───────────┼────────────────┼───────────────┼───────────────────┼─────────────┼────────┼───────┤ │ Adelie Torgersen39.118.71813750male 2007 │ │ Adelie Torgersen39.517.41863800female2007 │ │ Adelie Torgersen40.318.01953250female2007 │ └─────────┴───────────┴────────────────┴───────────────┴───────────────────┴─────────────┴────────┴───────┘ 

Using matplotlib with Ibis

Refer to the matplotlib documentation. matplotlib has not implemented the dataframe interchange protocol so it is recommended to call to_pandas() on the Ibis table before plotting.

import matplotlib.pyplot as plt  grouped = t.group_by("species").aggregate(count=ibis._.count()) grouped = grouped.mutate(row_number=ibis.row_number().over()).select(  "row_number",  (  ~s.cols("row_number") & s.all()  ), # see https://github.com/ibis-project/ibis/issues/6803 ) grouped
┏━━━━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━┓ ┃ row_number  species  count ┃ ┡━━━━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━┩ │ int64stringint64 │ ├────────────┼───────────┼───────┤ │ 0Adelie 152 │ │ 1Chinstrap68 │ │ 2Gentoo 124 │ └────────────┴───────────┴───────┘ 
# https://stackoverflow.com/questions/9101497/matplotlib-bar-graph-x-axis-wont-plot-string-values plt.figure(figsize=(6, 4)) plt.bar(grouped["row_number"].to_pandas(), grouped["count"].to_pandas()) plt.title("Penguin species counts") plt.xlabel("Species") plt.xticks(grouped["row_number"].to_pandas(), grouped["species"].to_pandas()) plt.ylabel("Count") plt.show()

Back to top