{
"cells": [
{
"cell_type": "markdown",
"id": "0a3e2a4e",
"metadata": {},
"source": [
"# Feuille 1 - UE Projet CMI-L1\n",
"Introduction to Python figures"
]
},
{
"cell_type": "markdown",
"id": "f8579363",
"metadata": {},
"source": [
"## **Libraries**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "e4d24b04",
"metadata": {},
"outputs": [],
"source": [
"# libraries\n",
"import scipy \n",
"# \"SciPy\" provides algorithms for optimization, integration, interpolation, eigenvalue problems, \n",
"# algebraic equations, differential equations, statistics and many other classes of problems.\n",
"import numpy as np\n",
"# Fast and versatile, the \"NumPy\" vectorization, indexing, and broadcasting concepts are the \n",
"# de-facto standards of array computing today.\n",
"import matplotlib.pyplot as plt\n",
"# \"Matplotlib\" is a comprehensive library for creating static, animated, and interactive \n",
"# visualizations in Python."
]
},
{
"cell_type": "markdown",
"id": "6a8dcbb5",
"metadata": {},
"source": [
"## Anatomy of a figure"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "b5768c9e",
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from PIL import Image\n",
"img = Image.open('anatomy.webp')\n",
"img.save(\"anatomy.png\")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "8f75cee3",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
""
],
"text/plain": [
""
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# import image module\n",
"from IPython.display import Image\n",
" \n",
"# get the image\n",
"Image(url=\"anatomy.png\", width=500, height=500)"
]
},
{
"cell_type": "markdown",
"id": "4c41a20d",
"metadata": {},
"source": [
"## Data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "9e9a38b3",
"metadata": {},
"outputs": [],
"source": [
"# some data to work\n",
"x= np.linspace(0,2*np.pi)\n",
"y= np.sin(x)"
]
},
{
"cell_type": "markdown",
"id": "82c13c31",
"metadata": {},
"source": [
"## Figures : Implicit or explicit?\n",
"**Using figures**\n",
"- Explicitly create Figures and Axes, and call methods on them (the \"object-oriented (OO) style\").\n",
"- Rely on pyplot to implicitly create and manage the Figures and Axes, and use pyplot functions for plotting."
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "0f84f0db",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"