--- /dev/null
+import numpy as np
+import matplotlib.pyplot as plt
+
+# example data
+x = np.arange(0.1, 4, 0.5)
+y = np.exp(-x)
+
+# example error bar values that vary with x-position
+error = 0.1 + 0.2 * x
+
+fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True)
+ax0.errorbar(x, y, yerr=error, fmt='-o')
+ax0.set_title('variable, symmetric error')
+
+# error bar values w/ different -/+ errors that
+# also vary with the x-position
+lower_error = 0.4 * error
+upper_error = error
+asymmetric_error = [lower_error, upper_error]
+
+ax1.errorbar(x, y, xerr=asymmetric_error, fmt='o')
+ax1.set_title('variable, asymmetric error')
+ax1.set_yscale('log')
+plt.show()
``numpy.loadtxt`` is generally faster at runtime if your data is well formated
(no missing values, only numerical data or constant length strings)
+Loading Data from Disk
+----------------------
+Numpy NB.
+=========
+**Remind me to look at some actual numpy usage at the end**
+
+- I think numpy does some type coercion when creating arrays.
+- Arrays created by ``numpy.genfromtxt`` can not in general be indexed like
+ ``data[xstart:xend, ystart:yend]``.
+- Data of unequal types are problematic! Pandas *may* be a better choice in
+ that case.
+- Specifying some value for ``dtype`` is probably necessary in most cases in
+ practice: https://docs.scipy.org/doc/numpy/reference/arrays.dtypes.html
+
Loading Data from Disk
----------------------
Pandas
Error Bars
----------
+.. code-block:: python
+ :include: error_bars.py
+
Stacked Bar Graph
-----------------
.. code-block:: python
:include: stacked_bars.py
+
+Resources
+---------
+NumPy User Guide: https://docs.scipy.org/doc/numpy/user/index.html
+
+NumPy Reference: https://docs.scipy.org/doc/numpy/reference/index.html#reference
+
+Matplotlib example gallery: https://matplotlib.org/gallery/index.html
+
+Pandas: It probably exists. Good luck.
+
+This presentation: https://git.friedersdorff.com/max/plotting_with_matplotlib.git