Plot a Series object using matplotlib.pyplot

Documentation

  1. Plotting in 10 minutes to pandas
  2. Visualization in the pandas User Guide
  3. matplotlib Tutorials
  4. The pandas plot functions:
    1. Series.plot. Some of these may require pip3 install scipy
      1. Series.plot.line
      2. Series.plot.bar vertical bar plot
      3. Series.plot.barh horizontal bar plot
      4. Series.plot.box
      5. Series.plot.hist histogram
      6. Series.plot.kde Kernel Density Estimation
      7. Series.plot.density
      8. Series.plot.area
      9. Series.plot.pie 🥧
    2. Axes.plot
    3. plt.plot
    4. DataFrame.plot
      1. DataFrame.plot.line
  5. Classes Figure and Axes

Plot the Series in one Figure.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

#Create a Series.
n = 10
index = pd.RangeIndex(n, name = "Hour")
data = np.arange(n)
series = pd.Series(data = data, index = index, name = "Temperature")
print(series)

#The Figure fills the window.
figure = plt.figure(figsize = [6.4, 4.8])   #width and height in inches
figure.canvas.set_window_title("matplotlib Series.plot")

#A Figure can contain one or more Axes.
#In this program, the Figure contains only one Axes.
axes = series.plot(color = "#1f77b4", grid = True, linewidth = 1.5)
axes.set_title("Temperature at each hour")
axes.set_ylabel(series.name)

plt.show()   #infinite loop
Hour
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: Temperature, dtype: int64

The window on my Mac screen was a bit smaller than 6.4 × 4.8 inches. Why? When I pressed the button with the floppy disk icon, the .png file I got on my Mac (shown below) was 1280 × 960 pixels. Why wasn’t it 640 × 480?

Default values

To see the default values for the parameters, use the plt.rcParams dictionary.

import sys
import matplotlib.pyplot as plt

params = [
    "figure.figsize",   #width and height, in inches
    "figure.dpi",       #dots per inch
    "savefig.dpi",
    "lines.color",
    "lines.linewidth"   #in points
]

for param in params:
    print(f"plt.rcParams[{param}] = {plt.rcParams[param]}")

cycler = plt.rcParams["axes.prop_cycle"]
i = int(plt.rcParams["lines.color"][-1])
print(f'default line color (#RRGGBB) = {list(cycler)[i]["color"]}')
print()

sys.exit(0)
plt.rcParams[figure.figsize] = [6.4, 4.8]
plt.rcParams[figure.dpi] = 100.0
plt.rcParams[savefig.dpi] = figure
plt.rcParams[lines.color] = C0
plt.rcParams[lines.linewidth] = 1.5
default line color (#RRGGBB) = #1f77b4

Try some other formats

In place of

axes = series.plot(color = "#1f77b4", grid = True, linewidth = 1.5)
try one of the following.

axes = series.plot.line(color = "#1f77b4", grid = True, linewidth = 1.5) #Does the same thing.

axes = series.plot(grid = True, marker = "o")                            #or try marker = "s"
axes = series.plot(grid = True, linestyle = "None", marker = "o")        #or try linestyle = "dashed"
axes = series.plot(drawstyle = "steps-mid", grid = True, marker = "o")   #or try drawstyle = "steps-post"

axes = series.plot.bar(rot = 0) #vertical bar chart; try rot = 45
axes = series.plot.barh()       #horizontal bar chart

Create two Figures.

By default, each plot is drawn in the most recently created Figure.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n = 10
index = pd.RangeIndex(n, name = "Hour")
data = np.arange(n)
series = pd.Series(data = data, index = index, name = "Temperature")
print(series)

figure0 = plt.figure()
figure0.canvas.set_window_title("matplotlib Series.plot.line")
axes0 = series.plot.line(grid = True)
axes0.set_title("Temperature at each hour")
axes0.set_ylabel(series.name)

figure1 = plt.figure()
figure1.canvas.set_window_title("matplotlib Series.plot.bar")
axes1 = series.plot.bar(rot = 0)
axes1.set_title("Temperature at each hour")
axes1.set_ylabel(series.name)

plt.show()
Hour
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: Temperature, dtype: int64

Four subplots in one Figure

axes is a 2 × 2 ndarray containing four Axes objects.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

n = 10
index = pd.RangeIndex(n, name = "Hour")
data = np.arange(n)
series = pd.Series(data = data, index = index, name = "Temperature")
print(series)

nrows = 2
ncols = 2

figure, axes = plt.subplots(nrows = nrows, ncols = ncols, sharex = True, sharey = True)
figure.canvas.set_window_title("matplotlib Series.plot")
figure.suptitle("Temperature at each hour")

for row in range(nrows):
    axes[row, 0].set_ylabel(series.name)

#upper left
series.plot.line(ax = axes[0, 0], grid = True)

#upper right
series.plot.line(ax = axes[0, 1], grid = True, linestyle = "None", marker = "o")

#lower left
series.plot.line(ax = axes[1, 0], grid = True, marker = "o")

#lower right
series.plot.bar(ax = axes[1, 1], rot = 0)

plt.show()
Hour
0    0
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
Name: Temperature, dtype: int64