# 1. Matplotlib¶

agg
cairo
eps
pdf
png
ps
svg
raster graphics
vector graphics

## 1.2. What is matplotlib¶

Pyplot’s state-machine environment behaves similarly to MATLAB and should be most familiar to users with MATLAB experience.

## 1.3. Installing and using matplotlib¶



### 1.10.2. Annotating text¶

import numpy as np
import matplotlib.pyplot as plt

ax = plt.subplot(111)

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
arrowprops=dict(facecolor='black', shrink=0.05),
)

plt.ylim(-2,2)
plt.show()


Fig. 1.18. Annotating text

## 1.11. Logarithmic and other nonlinear axes¶

plt.xscale('log')

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import NullFormatter  # useful for logit scale

# Fixing random state for reproducibility
np.random.seed(19680801)

# make up some data in the interval ]0, 1[
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

# plot with various axes scales
plt.figure(1)

# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)

# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)

# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.01)
plt.title('symlog')
plt.grid(True)

# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)
# Format the minor tick labels of the y-axis into empty strings with
# NullFormatter, to avoid cumbering the axis with too many labels.
plt.gca().yaxis.set_minor_formatter(NullFormatter())
# Adjust the subplot layout, because the logit one may take more space
# than usual, due to y-tick labels like "1 - 10^{-3}"
wspace=0.35)

plt.show()


Fig. 1.19. Logarithmic and other nonlinear axes

## 1.12. plt.plot() vs ax.plot()¶

fig = plt.figure()
plt.plot(data)
fig.show()

1. Takes the current figure and axes (if none exists it will create a new one) and plot into them:

line = plt.plot(data)

2. In your case, the behavior is same as before with explicitly stating the axes for plot:

ax = plt.axes()
line = ax.plot(data)

3. This approach of using ax.plot(...) is a must, if you want to plot into multiple axes (possibly in one figure). For example when using a subplots. Explicitly creates new figure - you will not add anything to previous one. Explicitly creates a new axes with given rectangle shape and the rest is the same as with 2:

fig = plt.figure()
line = ax.plot(data)


possible problem using figure.add_axes is that it may add a new axes object to the figure, which will overlay the first one (or others). This happens if the requested size does not match the existing ones.

## 1.13. Assignment¶

### 1.13.1. Trigonometry¶

• Filename: matplotlib_trigonometry.py
• Lines of code to write: 15 lines
• Estimated time of completion: 20 min
1. Dla x z przedziału od 0.0 do 1.0 z próbkowaniem co 0.01 przedstaw przebiegi funkcji sin, cos dla parametrów 2 * np.pi * x

2. Stwórz dwa osobne obrazki (figure):

• Każdy z przebiegów na osobnym subplot
• Na jednym plot dwa przebiegi funkcji
3. Wykresy (subplot) mają być jeden nad drugim

4. Wykresy podpisz nazwą funkcji trygonometrycznej

5. Tekst etykiety osi y ustaw na “Wartość funkcji”

6. Pokoloruj nazwy thicków x dla wykresu sin na czerwono

7. Pokoloruj nazwę (label) dla cos na kolor zielony

8. Na obu wykresach pokaż grid

9. Narysuj drugi obrazek z nałożonymi na jeden plot wykresami obu funkcji

Hint: np.sin() np.cos()

### 1.13.2. Iris scatter¶

1. Z podanego powyżej adresu URL pobierz dane
2. Dla każdego gatunku
3. Dane stosunku sepal_length do sepal_width zwizualizuj w formie scatter za pomocą matplotlib
4. Każdy gatunek powinien mieć inny kolor
Hint: pd.groupby()