mirror of
https://github.com/TeachBooks/manual.git
synced 2026-11-12 22:35:51 +00:00
41 lines
2.2 KiB
Markdown
41 lines
2.2 KiB
Markdown
# Code blocks that produce figures
|
|
|
|
This can be done with notebooks, but it's not easy to make references to figures in notebooks. You can also place the code that produces and saves the figure in a separate `.py` file, and include that in a markdown file. Let's say we want to make a simple sine wave:
|
|
|
|
1. Place the code of the figure in a `.py` file. In this case, `sinewave.py` produces our figure. The code looks like this:
|
|
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
|
|
x = np.linspace(0, 2*np.pi, endpoint=True)
|
|
y = np.sin(x)
|
|
|
|
plt.figure()
|
|
plt.plot(x, y)
|
|
plt.title('$y=\sin(x)$')
|
|
plt.xlabel('$x$')
|
|
plt.ylabel('$y$')
|
|
plt.savefig('sinewave.svg')
|
|
|
|
|
|
> **Warning**
|
|
>
|
|
> It is important that the name of the saved figure is **exactly** the same as the name of the Python script that generates it. Otherwise, the figure will not be generated by the Runner.
|
|
|
|
2. Test your code and make sure that the figure looks good. When you are ready to commit, place your code file in `book/code`.
|
|
|
|
The book uses a Matplotlib [style sheet](https://matplotlib.org/stable/tutorials/introductory/customizing.html); to see what this looks like on your local machin you will have to run `plt.style.use('../../config/matplotlibrc')` after importing Matplotlib. This should be done outside of the `*.py` file you are creating. Note that the example style sheet path assumes you are working in the `book/code` directory. It is recommended to preserve a list of figures using a notebook in `code_checks`, where there are also working examples. It is not necessary to commit `*.svg` files as these are cleaned when the book is generated.
|
|
|
|
3. Now include the code file by using the following directives:
|
|
|
|
````{toggle}
|
|
```{eval-rst}
|
|
.. literalinclude:: ../sinewave.py
|
|
:language: python
|
|
```
|
|
````
|
|
> **Note**
|
|
>
|
|
> the outer most directive needs an extra tick mark for nested cases.
|
|
|
|
4. Include the figure as described above. Remember that figures are saved in the `book/figures` directory. We also use a naming convention of `*_py.svg` for figures generated from code, to easily include them in `.gitignore`, since they are built in the CI/CD pipeline.
|