# 13.Wednesday, 31-07-2019, Draw chart by Matplotlib
### Needed library
```python
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
%matplotlib inline
mpl.style.use('default')
```
- We need to convert Data Frame to list before drawing chart
```python
profitList = df ['total_profit'].tolist()
```
### Chart
*Figure*
|Operator|Description|
|--- |--- |
|`fig = plt.figures()`|a container that contains all plot elements|
*Axes*
|Operator|Description|
|--- |--- |
|`fig.add_axes()` |Initializes subplot |
|`a = fig.add_subplot(222)` | A subplot is an axes on a grid system row-col-num.|
|`fig, b = plt.subplots(nrows=3, nclos=2)`|Adds subplot|
|`ax = plt.subplots(2, 2)`|Creates subplot: 2 rows & 2 cols|
**Plotting**
|Operator|Description|
|--- |--- |
|`lines = plt.plot(x,y)`|Plot data connected by lines|
|`plt.scatter(x,y)`|Creates a scatterplot, unconnected data points|
|`plt.bar(xvalue, data , width, color...)`|simple vertical bar chart|
|`plt.barh(yvalue, data, width, color...)`|simple horizontal bar|
|`plt.hist(x, y)`|Plots a histogram|
|`plt.boxplot(x,y)`|Box and Whisker plot|
|`plt.violinplot(x, y)`|Creates violin plot|
|`ax.fill(x, y, color='lightblue')`;`ax.fill_between(x,y,color='yellow')`|Fill area under/between plots|
|`plt.stackplot(x, y1, y2,...,yn, colors=list_of_color, labels=list_of_lables)`|Creates Stack plot|
*Limits*
|Operators|Description|
|--- |--- |
|`plt.xlim(0, 7)`|Sets x-axis to display 0 - 7|
|`plt.ylim(-0.5, 9)`|Sets y-axis to display -0.5 - 9|
|`ax.set(xlim=[0, 7], ylim=[-0.5, 9])`;`ax.set_xlim(0, 7)`|Sets limits|
|`plt.margins(x=1.0, y=1.0)`|Set margins: add padding to a plot, values 0 - 1|
|`plt.axis('equal')`|Set the aspect ratio of the plot to 1|
*Legend/labels*
|Operator|Description|
|--- |--- |
|`plt.title('just a title')`|Sets title of plot|
|`plt.xlabel('x-axis')`|Sets label next to x-axis|
|`plt.ylabel('y-axis')`|Sets label next to y-axis|
|`ax.set(title='axis', ylabel='Y-Axis', xlabel='X-Axis')`|Set title and axis labels|
|`ax.legend(loc='best')`|Legend is used to show label of each plot. No overlapping plot elements|
*Tick*
|Operator|Description|
|--- |--- |
|`plt.xticks(x, labels, rotation='vertical')`|Set ticks|
|`ax.xaxis.set(ticks=range(1,5), ticklabels=[3,100,-12,"foo"])`|Set x-ticks - The information in X-Axis|
|`ax.tick_params(axis='y', direction='inout', length=10)`|Make y-ticks longer and go in and out|
Examples:
https://colab.research.google.com/drive/1S6Sfmo46f_pqc-HzelN30LiFlVdvkV_6
### Simple elements
- Write label
```python
plt.xlabel('x label')
plt.ylabel('y label')
- Other way
fig, ax = plt.subplots()
ax.set_xlabel('xlabel')
ax.set_ylabel('ylabel')
```
- Write Title of chart
```python
plt.title('Simple plot')
```
- Write a text
```python
ax.text(3, 8, 'boxed italics text in data coords', style='italic',
bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 10})
* Detail:
- x
- y
- content
- style
- format of the frame
```
- Write a point
```python
ax.plot([2], [1], 'o')
```
- Write an arrow
```python
ax.annotate('annotate', xy=(2, 1), xytext=(2, 3),
arrowprops=dict(facecolor='black', shrink=1))
```