【Python】DS的基础学习笔记12:Matplotlib库

Matplotlib库

数据可视化是数据分析的一个重要工具

12.0 环境配置

12.0.1 要不要plt.show()

  • ipython中可用魔术方法 %matplotlib inline
  • pycharm 中必须使用plt.show()
%matplotlib_inline
import matplotlib.pyplot as plt
#plt.style.use("seaborn-whitegrid")

x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.ylabel("squares")
#plt.show()

运行结果
没有plt.show()只是图像生成,但增加了此语句才可以显示图像

12.0.2 设置样式

plt.style.available[:5]  # 查看前五个样式

[‘Solarize_Light2’, ‘_classic_test_patch’, ‘bmh’, ‘classic’, ‘dark_background’]

我们也可以用with语句临时设置样式

with plt.style.context("seaborn-white"):
    plt.plot(x, y)
plt.show()

也可以在开始时永久设置样式

plt.style.use("seaborn-whitegrid")
x = [1, 2, 3, 4]
y = [1, 4, 9, 16]
plt.plot(x, y)
plt.show()

运行结果

12.0.3 将图像保存为文件

x = np.linspace(0, 10, 100)
plt.plot(x, np.exp(x))
plt.savefig("my_figure.png")
plt.show()

运行结果
图片会保存至Py文件所在文件夹
注意:绘图保存图片空白问题,需要先savefig再show,因为show会生成一张全新空白画布,导致之后save的是空白图片

12.1 Matplotlib库

12.1.1 折线图

import matplotlib.pyplot as plt
import numpy as np

plt.style.use("seaborn-whitegrid")
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.sin(x))
plt.show()

运行结果
因为这里我们取了100个点,因此折线图表现得比较圆滑,如果我们只取10个点,我们就会得到肉眼可见的折线图

plt.style.use("seaborn-whitegrid")
x = np.linspace(0, 2 * np.pi, 10)
plt.plot(x, np.sin(x))
plt.show()

运行结果
一般来说,我们都把这些点取得多一些,使得整个图像更加好看

  • 绘制多条曲线
x = np.linspace(0, 2 * np.pi, 100)
plt.plot(x, np.cos(x))
plt.plot(x, np.sin(x))
plt.show()

运行结果

1 调整线条颜色和风格
  • 调整线条颜色
x = np.linspace(0, 2 * np.pi, 100)
offsets = np.linspace(0, np.pi, 5)  # 设置不同的偏移量
colors = ["blue", "g", "r", "yellow", "pink"]
for offset, color in zip(offsets, colors):
    plt.plot(x, np.sin(x-offset), color=color)  # color可缩写为c
plt.show()

运行结果
可以发现,代码中有些颜色使用了缩写,可以查阅matplotlib官方文档查找对应简写

  • 调整线条风格
x = np.linspace(0, 10, 11)
offsets = list(range(8))
linestyles = ["solid", "dashed", "dashdot", "dotted", "-", "--", "-.", ":"]
for offset, linestyle in zip(offsets, linestyles):
    plt.plot(x, x+offset, linestyle=linestyle)  # linestyle可简写为ls
plt.show()

运行结果

  • 调整线宽
x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
linewidths = (i*2 for i in range(1, 5))
for offset, linewidth in zip(offsets, linewidths):
    plt.plot(x, x+offset, linewidth=linewidth)  # linewidth可简写为lw
plt.show()

运行结果

  • 调整数据点标记
x = np.linspace(0, 10, 11)
offsets = list(range(0, 12, 3))
markers = ['*', '+', 'o', 's']
for offset, marker in zip(offsets, markers):
    plt.plot(x, x+offset, marker=marker, markersize=10)  # markersize可简写为ms
plt.show()

运行结果

  • 颜色与风格设置的简写
x = np.linspace(0, 10, 11)
offsets = list(range(0, 8, 2))
color_linestyles = ['g-', 'c--', 'k-.', 'r:']
for offset, color_linestyle in zip(offsets, color_linestyles):
    plt.plot(x, x+offset, color_linestyle)
plt.show()

运行结果

x = np.linspace(0, 10, 11)
offsets = list(range(0, 8, 2))
color_linestyles = ['g*-', 'c+--', 'ko-.', 'rs:']
for offset, color_linestyle in zip(offsets, color_linestyles):
    plt.plot(x, x+offset, color_linestyle)
plt.show()

运行结果
其它用法及颜色缩写、数据点标记缩写等请查看官方文档,如下:
Matplotlib官方文档

2 调整坐标轴
  • xlim, ylim
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.xlim(-1, 7)
plt.ylim(-1.5, 1.5)
plt.show()

运行结果

  • axis
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.axis([-2, 8, -2, 2])
plt.show()

运行结果
还可以设置坐标轴的风格
比如紧凑类型的tight

x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.axis('tight')
plt.show()

运行结果
扁平类型的equal

x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.axis('equal')
plt.show()

运行结果
在ipython环境下如何得知更多功能?

?plt.axis

axis

  • 对数坐标
x = np.logspace(0, 5, 100)
plt.plot(x, np.log(x))
plt.xscale("log")
plt.show()

运行结果

  • 调整坐标轴的刻度
x = np.linspace(0, 10, 100)
plt.plot(x, x**2)
plt.xticks(np.arange(0, 12, step=1))
plt.show()

运行结果

x = np.linspace(0, 10, 100)
plt.plot(x, x**2)
plt.xticks(np.arange(0, 12, step=1), fontsize=15)
plt.yticks(np.arange(0, 110, step=10))
plt.show()

运行结果

  • 调整刻度样式
x = np.linspace(0, 10, 100)
plt.plot(x, x**2)
plt.tick_params(axis="both", labelsize=15)
plt.show()

运行结果

3 设置图形标签
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x))
plt.title("A Sine Curve", fontsize=20)
plt.xlabel("x", fontsize=15)
plt.ylabel("sin(x)", fontsize=15)
plt.show()

运行结果

4 设置图例
  • 默认
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.legend()
plt.show()

运行结果

  • 修饰图例
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), "b-", label="Sin")
plt.plot(x, np.cos(x), "r--", label="Cos")
plt.ylim(-1.5, 2)
plt.legend(loc="upper center", frameon=True, fontsize=15)
plt.show()

loc指位置,可以设十种,3×3与best
frameon设置边框
运行结果

5 添加文字和箭头
  • 添加文字
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), "b-")
plt.text(3.5, 0.5, "y=sin(x)", fontsize=15)
plt.show()

运行结果

  • 添加箭头
x = np.linspace(0, 2*np.pi, 100)
plt.plot(x, np.sin(x), "b-")
plt.annotate('local min', xy=(1.5*np.pi, -1), xytext=(4.5, 0), arrowprops=dict(facecolor='black', shrink=0.1))
plt.show()

xy指终点位置,xytext指起点位置,arrowprops对箭头进行设置
运行结果
更多方法可查阅官方文档

12.1.2 散点图

1 简单散点图
x = np.linspace(0, 2*np.pi, 20)
plt.scatter(x, np.sin(x), marker='o', s=30, c='r')  # s指大小 c指颜色
plt.show()

运行结果

2 颜色配置
x = np.linspace(0, 10, 100)
y = x**2
plt.scatter(x, y, c=y, cmap="inferno")  # c=y指映射关系
plt.colorbar()
plt.show()

运行结果
颜色配置参考官方文档
颜色配置matplotlib官方文档

3 根据数据控制点的大小
x, y, colors, size = (np.random.rand(100) for i in range(4))
plt.scatter(x, y, c=colors, s=1000*size, cmap="viridis")
plt.show()

这里的数据控制点的大小指的是一一对应关系

运行结果

4 透明度
x, y, colors, size = (np.random.rand(100) for i in range(4))
plt.scatter(x, y, c=colors, s=1000*size, cmap="viridis", alpha=0.3)
plt.colorbar()
plt.show()

alpha参数指透明度,默认为1,透明为0,这里取0.3,整体偏透明
运行结果

【例】随机漫步

根据点的若干次移动,找到其移动轨迹

from random import choice


class RandomWalk():
    """一个生产随机漫步的类"""

    def __init__(self, num_points=5000):
        self.num_points = num_points
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        while len(self.x_values) < self.num_points:
            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction * x_distance

            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance

            if x_step == 0 and y_step == 0:
                continue
            next_x = self.x_values[-1] + x_step
            next_y = self.y_values[-1] + y_step
            self.x_values.append(next_x)
            self.y_values.append(next_y)
rw = RandomWalk(10000)  # 创建类
rw.fill_walk()  # 调用方法
point_numbers = list(range(rw.num_points))  # 建立对应映射颜色
plt.figure(figsize=(12, 6))
plt.scatter(rw.x_values, rw.y_values, c=point_numbers, cmap="inferno", s=1)
plt.colorbar()
plt.scatter(0, 0, c="green", s=100)  # 起点
plt.scatter(rw.x_values[-1], rw.y_values[-1], c="red", s=100)  # 终点
plt.xticks([])  # 不显示坐标轴
plt.yticks([])
plt.show()

运行结果

12.1.3 柱形图

1 简单柱形图
x = np.arange(1, 6)
plt.bar(x, 2*x, align="center", width=0.5, alpha=0.5, color='yellow', edgecolor='red')
plt.tick_params(axis="both", labelsize=13)
plt.show()

运行结果
替换坐标轴刻度可用plt.xtick

x = np.arange(1, 6)
plt.bar(x, 2*x, align="center", width=0.5, alpha=0.5, color='yellow', edgecolor='red')
plt.xticks(x, ['G1', 'G2', 'G3', 'G4', 'G5'])
plt.tick_params(axis="both", labelsize=13)
plt.show()

运行结果
若想设置不同颜色,则可一一对应不同颜色

x = ["G"+str(i) for i in range(1, 6)]
y = 1/(1+np.exp(-np.arange(5)))

colors = ['red', 'yellow', 'blue', 'green', 'gray']
plt.bar(x, y, align='center', width=0.5, alpha=0.5, color=colors)
plt.tick_params(axis='both', labelsize=13)
plt.show()

运行结果

2 累加柱形图
x = np.arange(5)
y1 = np.random.randint(20, 30, size=5)
y2 = np.random.randint(20, 30 ,size=5)
plt.bar(x, y1, width=0.5, label="man")
plt.bar(x, y2, width=0.5, bottom=y1, label="woman")
plt.legend()
plt.show()

运行结果

3 并列柱形图
x = np.arange(15)
y1 = x+1
y2 = y1+np.random.random(15)
plt.bar(x, y1, width=0.3, label="man")
plt.bar(x+0.3, y2, width=0.3, label="women")
plt.legend()
plt.show()

运行结果

4 横向柱形图
x = ['G1', 'G2', 'G3', 'G4', 'G5']
y = 2 * np.arange(1, 6)
plt.barh(x, y, align="center", height=0.5, alpha=0.8, color="blue", edgecolor="red")
plt.tick_params(axis="both", labelsize=13)
plt.show()

使用barh即可,宽度用height设置
运行结果

12.1.4 多子图

1 简单多子图
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)


t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.subplot(211)
plt.plot(t1, f(t1), "bo-", markerfacecolor="r", markersize=5)
plt.title("A tale of 2 subplots")
plt.ylabel("Damped oscillation")

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), "r--")
plt.xlabel("time (s)")
plt.ylabel("Undamped")

plt.show()

运行结果

2 多行多列子图
x = np.random.random(10)
y = np.random.random(10)

plt.subplot(321)
plt.scatter(x, y, s=80, c="b", marker=">")

plt.subplot(322)
plt.scatter(x, y, s=80, c="g", marker="*")

plt.subplot(323)
plt.scatter(x, y, s=80, c="r", marker="s")

plt.subplot(324)
plt.scatter(x, y, s=80, c="c", marker="p")

plt.subplot(325)
plt.scatter(x, y, s=80, c="m", marker="+")

plt.subplot(326)
plt.scatter(x, y, s=80, c="y", marker="H")

plt.show()

运行结果

3 不规则多子图
def f(x):
    return np.exp(-x) * np.cos(2*np.pi*x)


x = np.arange(0.0, 3.0, 0.01)
grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)

plt.subplot(grid[0, 0])
plt.plot(x, f(x))

plt.subplot(grid[0, 1:])
plt.plot(x, f(x), "r--", lw=2)

plt.subplot(grid[1, :])
plt.plot(x, f(x), "g-", lw=3)

plt.show()

运行结果

12.1.5 直方图

1 普通频次直方图
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

plt.hist(x, bins=50, facecolor='g', alpha=0.75)  # bins指把有效坐标轴分为50区间
plt.show()

均值为100,标准差为15
运行结果

2 频率密度

需要在hist时添加参数density=True

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

plt.hist(x, 50, density=True, color='r')
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)
plt.show()

运行结果
同时可以添加参数histtype为step,使得直方图只有边缘而没有填充

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

plt.hist(x, 50, density=True, color='r', histtype='step')
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)
plt.show()

运行结果
我们也可以利用scipy.stat库中的norm
计算实际正态分布的曲线并与直方图进行比较

from scipy.stats import norm
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

_, bins, __ = plt.hist(x, 50, density=True)
y = norm.pdf(bins, mu, sigma)
plt.plot(bins, y, 'r--', lw=3)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 0.03)
plt.show()

运行结果

3 累积概率分布
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

plt.hist(x, 50, density=True, cumulative=True, color='r')
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, 0.8, r'$\mu=100,\ \sigma=15$')
plt.xlim(40, 160)
plt.ylim(0, 1.1)
plt.show()

cumulative设置为True即可
运行结果

【例】模拟投两个骰子
class Die():
    """模拟一个骰子的类"""

    def __init__(self, num_sides=6):
        self.num_sides = num_sides

    def roll(self):
        return np.random.randint(1, self.num_sides+1)
  • 重复投一个骰子
die = Die()
results =[]
for i in range(60000):
    result = die.roll()
    results.append(result)

plt.hist(results, bins=6, range=(0.75, 6.75), align='mid', width=0.5)
plt.xlim(0, 7)
plt.show()

运行结果

  • 重复投两个骰子
die1 = Die()
die2 = Die()
results =[]
for i in range(60000):
    result = die1.roll() + die2.roll()
    results.append(result)

plt.hist(results, bins=11, range=(1.75, 12.75), align='mid', width=0.5)
plt.xticks(np.arange(2, 13, step=1))
plt.show()

运行结果

12.1.6 误差图

1 基本误差图
x = np.linspace(0, 10, 50)
dy = 0.5
y = np.sin(x) + dy*np.random.randn(50)

plt.errorbar(x, y, yerr=dy, fmt="+b")
plt.show()

yerr指误差,fmt指格式
运行结果

2 柱形图误差图
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
menStd = (2, 3, 4, 1, 2)
womenStd = (3, 5, 2, 3, 3)
ind = ['G1', 'G2', 'G3', 'G4', 'G5']
width = 0.35

p1 = plt.bar(ind, menMeans, width=width, label="Men", yerr=menStd)
p2 = plt.bar(ind, womenMeans, width=width, bottom=menMeans, label="Women", yerr=womenStd)

plt.ylabel('Scores')
plt.title('Scores by group and gender')
plt.legend()
plt.show()

运行结果

12.1.7 面向对象的风格简介

1 普通图
x = np.linspace(0, 5, 10)
y = x ** 2

fig = plt.figure(figsize=(8, 4), dpi=80)  # 图像
axes = fig.add_axes([0.1, 0.1, 0.8, 0.8])  # 轴 left bottom width height (range 0 to 1)

axes.plot(x, y, 'r')
axes.set_xlabel('x')
axes.set_ylabel('y')
axes.set_title('title')
plt.show()

dpi指像素
axes指轴,在画布的位置
运行结果

2 画中画
x = np.linspace(0, 5, 10)
y = x ** 2

fig = plt.figure() 

ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax2 = fig.add_axes([0.2, 0.5, 0.4, 0.3])

ax1.plot(x, y, 'r')
ax1.set_xlabel('x')
ax1.set_ylabel('y')
ax1.set_title('title')

ax2.plot(y, x, 'g')
ax2.set_xlabel('y')
ax2.set_ylabel('x')
ax2.set_title('insert title')
plt.show()

运行结果

3 多子图
def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)


t1 = np.arange(0.0, 3.0, 0.01)

fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)

ax1 = plt.subplot(2, 2, 1)
ax1.plot(t1, f(t1))
ax1.set_title('Upper left')

ax2 = plt.subplot(2, 2, 2)
ax2.plot(t1, f(t1))
ax2.set_title('Upper right')

ax3 = plt.subplot(2, 1, 2)
ax3.plot(t1, f(t1))
ax3.set_title('Lower')

plt.show()

运行结果

12.1.8 三维图形简介

1 三维数据点与线
from mpl_toolkits import mplot3d


ax = plt.axes(projection='3d')
zline = np.linspace(0, 15, 1000)
xline = np.sin(zline)
yline = np.cos(zline)
ax.plot3D(xline, yline, zline)

zdata = 15*np.random.random(100)
xdata = np.sin(zdata)
ydata = np.cos(zdata)
ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap="spring")

plt.show()

运行结果

2 三维数据曲面图
def f(x, y):
    return np.sin(np.sqrt(x**2 + y**2))


x = np.linspace(-6, 6, 30)
y = np.linspace(-6, 6, 30)
X, Y = np.meshgrid(x, y)  # 网格化
Z = f(X, Y)

ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, Z, cmap="viridis")
plt.show()

运行结果

12.2 Seaborn库——文艺青年的最爱

12.2.1 Seaborn与Matplotlib

Seaborn是一个基于matplotlib且数据结构与pandas统一的统计图制作库
首先我们看一下matplotlib的表现

x = np.linspace(0, 10, 500)
y = np.cumsum(np.random.randn(500, 6), axis=0)

with plt.style.context("classic"):
    plt.plot(x, y)
    plt.legend("ABCDEF", ncol=2, loc="upper left")
    plt.show()

运行结果
而在seaborn中会是什么样子的呢?

import seaborn as sns


x = np.linspace(0, 10, 500)
y = np.cumsum(np.random.randn(500, 6), axis=0)
sns.set()
plt.plot(x, y)
plt.legend("ABCDEF", ncol=2, loc="upper left")
plt.show()

运行结果

12.2.2 柱形图的对比

x = ['G1', 'G2', 'G3', 'G4', 'G5']
y = 2 * np.arange(1, 6)

plt.figure(figsize=(8, 4))
plt.barh(x, y, align="center", height=0.5, alpha=0.8, color="blue")
plt.tick_params(axis="both", labelsize=13)
plt.show()

运行结果

x = ['G1', 'G2', 'G3', 'G4', 'G5']
y = 2 * np.arange(1, 6)
sns.barplot(y, x, lw=5)
plt.show()

运行结果
可以使用如下代码查看更多功能

import seaborn as sns

sns.barplot?

12.2.3 以鸢尾花数据集为例

import seaborn as sns


iris = sns.load_dataset("iris")
print(iris.head())

运行结果

sns.pairplot(data=iris, hue="species")
plt.show()

运行结果

12.3 Pandas中的绘图函数概览

import pandas as pd

12.3.1 线形图

df = pd.DataFrame(np.random.randn(1000, 4).cumsum(axis=0),
                  columns=list("ABCD"),
                  index=np.arange(1000))
print(df.head())

运行结果

df.plot()
plt.show()

运行结果

12.3.2 柱形图

df2 = pd.DataFrame(np.random.rand(10, 4), columns=list("abcd"))
print(df2)

运行结果

  • 多组数据竖图
df2.plot.bar()
plt.show()

运行结果

  • 多组数据累加竖图
df2.plot.bar(stacked=True)
plt.show()

运行结果

  • 多组数据累加横图
df2.plot.barh(stacked=True)
plt.show()

运行结果

12.3.3 直方图与密度图

df4 = pd.DataFrame({"A": np.random.randn(1000)+3, "B": np.random.randn(1000), "C": np.random.randn(1000)-3})
print(df4.head())

运行结果

  • 普通直方图
df4.plot.hist(bins=20)
plt.show()

运行结果

  • 累加直方图
df4['A'].plot.hist(cumulative=True)
plt.show()

运行结果

  • 概率密度图
df4['A'].plot(kind="kde")
plt.show()

运行结果

  • 差分
df = pd.DataFrame(np.random.randn(1000, 4).cumsum(axis=0),
                  columns=list("ABCD"),
                  index=np.arange(1000))
print(df.head())
df.diff().hist(bins=50, color="r")
plt.show()

运行结果
运行结果

12.3.4 散点图

这里用到了housing数据集
Github地址
将数据集放至与Python文件同一个文件夹即可

housing = pd.read_csv("housing.csv")
print(housing.head())

运行结果

"""基于地理数据的人口、房价可视化"""
# 圆的半径大小代表每个区域人口数量(s),颜色代表价格(c),用预定义的jet表进行可视化
with sns.axes_style("white"):
    housing.plot(kind="scatter", x="longitude", y="latitude", alpha=0.6,
                 s=housing["population"]/100, label="population",
                 c="median_house_value", cmap=plt.get_cmap("jet"), colorbar=True, figsize=(12, 8))
plt.legend()
plt.axis([-125, -113.5, 32, 43])
plt.show()

运行结果
我们还可以任取两列作为坐标轴

with sns.axes_style("white"):
    housing.plot(kind="scatter", x="median_income", y="median_house_value", alpha=0.8)
plt.show()

运行结果
发现有一定相关性,收入越高,房价也在升高

12.3.5 多子图

df = pd.DataFrame(np.random.randn(1000, 4).cumsum(axis=0),
                  columns=list("ABCD"),
                  index=np.arange(1000))
print(df.head())

运行结果

  • 默认情形
df.plot(subplots=True, figsize=(6, 16))
plt.show()

运行结果

  • 设定图形安排
df.plot(subplots=True, layout=(2, 2), figsize=(16, 6), sharex=False)
plt.show()

运行结果
其他内容请参考Pandas中文文档
Pandas中文文档
以上,便是第十二节深入探索内容,Matplotlib库。
下一节将深入理解机器学习库:Scikit-learn库。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值