Python数据分析-matplotlib

引言

当谈论数据分析和数据可视化时,Matplotlib是一个强大的工具,它不仅提供了丰富的功能,还允许用户创建高质量的图形和图表。本篇博客旨在帮助你掌握Matplotlib的基础知识和高级技巧,以便你能够有效地利用它来展示数据、解释趋势和传达信息。

在这篇博客中,我们将深入探讨Matplotlib的各个方面,从数据可视化的基础开始,包括折线图、散点图、条形图、直方图和饼图等,一直到更高级的图形元素,如图形注释、箭头、图例高级用法、区域填充和阴影效果。我们还将学习如何创建三维数据可视化、动画和交互式控件,以及如何导出图形文件、设置图形风格和自定义色彩和配色方案。

本文提供了各种示例代码,图像就不提供出来了,简单示例可以通过复制代码运行获得图像

原因:个人采用的是github图床,利用jsDelivr 提供的全球 CDN 加速

github 和jsdelivr 都有大小限制: GitHub 图床仓库大小不能超过1G。 因为GitHub 原则上是反对仓库图床化的,当仓库超过1G 后会有人工审核仓库内容,如果发现用来做图床,轻则删库重则封号

​ 当然,主要还是简单图例我觉得太多,太麻烦……放重点图例吧哈哈

1. Matplotlib 简介和安装

  • Matplotlib简介:Matplotlib是Python中最常用的数据可视化库之一,用于创建静态、动态、交互式图表。

  • 安装Matplotlib:使用pipconda可以轻松安装Matplotlib。

    示例代码:

    # 安装Matplotlib
    !pip install matplotlib

2. Matplotlib 绘图原理

  • 绘图原理:Matplotlib采用面向对象的方式来创建图表。所有图表元素都是对象,从Figure对象到Axes对象,都是构建图表的关键部分。

3. Matplotlib 常用模块和函数

pyplot 模块

  • pyplot简介pyplot是Matplotlib的一个子模块,提供了一种类似于MATLAB的界面,用于绘制图表。

    示例代码:

    import matplotlib.pyplot as plt

    Figure 对象和子图

  • Figure对象Figure对象是图表的顶层容器,用于容纳图表中的所有元素。

  • 子图:子图是Axes对象的容器,用于在一个Figure对象中容纳多个图表。

    示例代码:

    # 创建一个Figure对象
    fig = plt.figure()
    # 创建一个子图
    ax = fig.add_subplot(111)

    Axes 对象和坐标系

  • Axes对象Axes对象是图表的主要绘图区域,用于绘制数据点、线条、文本等。

  • 坐标系Axes对象具有X和Y坐标轴,你可以在坐标轴上绘制数据。

    示例代码:

    # 绘制一条线
    ax.plot([0, 1, 2], [0, 1, 4])

    图形属性设置

  • 线条样式:通过linestyle参数设置线条样式。

  • 颜色:通过color参数设置线条颜色。

  • 标记点:通过marker参数设置标记点样式。

    示例代码:

    # 自定义线条样式、颜色和标记点
    ax.plot([0, 1, 2], [0, 1, 4], linestyle='--', color='red', marker='o')

    文本标注和注释

  • 添加文本标注:使用text()函数在图表中添加文本标注。

  • 添加注释:使用annotate()函数添加带箭头的注释。

    示例代码:

    # 添加文本标注
    ax.text(1, 3, 'Data Point (1, 3)')
    # 添加注释
    ax.annotate('Max Value', xy=(2, 4), xytext=(1.5, 3.5),
              arrowprops=dict(arrowstyle='->'))
import matplotlib.pyplot as plt

# 创建一个Figure对象
fig = plt.figure()
# 创建一个子图
ax = fig.add_subplot(111)

# 调整坐标轴刻度线和标签的颜色为白色——我的jupyter notebook的背景色是黑色,改与自己主题颜色适应的坐标轴颜色
ax.tick_params(axis='both', colors='white')

# 绘制一条线
ax.plot([0, 1, 2], [0, 1, 4])

# 自定义线条样式、颜色和标记点
ax.plot([0, 1, 2], [0, 1, 4], linestyle='--', color='red', marker='o')

# 添加文本标注
ax.text(1, 3, 'Data Point (1, 3)')

# 添加注释
ax.annotate('Max Value', xy=(2, 4), xytext=(1.5, 3.5),
            arrowprops=dict(arrowstyle='->'))

plt.show()

4.折线图绘制

单条折线图

绘制一个简单的单条折线图。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 8, 12, 15, 7]

# 绘制折线图
plt.plot(x, y, label='Line 1', marker='o', linestyle='-', color='blue')

# 添加标题和标签
plt.title('单条折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.plot(x, y, label='Line 1', marker='o', linestyle='-', color='blue'):这行代码绘制了折线图。xy分别是X轴和Y轴的数据,label用于设置图例标签,marker指定标记点的样式,linestyle设置线条样式,color设置线条颜色。
  • plt.title('单条折线图'):添加标题。
  • plt.xlabel('X轴')plt.ylabel('Y轴'):添加X轴和Y轴的标签。
  • plt.legend():显示图例。
  • plt.show():显示图表。

多条折线图

绘制多条折线图。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3, 4, 5]
y1 = [10, 8, 12, 15, 7]
y2 = [5, 12, 6, 8, 11]

# 绘制多条折线图
plt.plot(x, y1, label='Line 1', marker='o', linestyle='-', color='blue')
plt.plot(x, y2, label='Line 2', marker='x', linestyle='--', color='red')

# 添加标题和标签
plt.title('多条折线图')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图例
plt.legend()

# 显示图表
plt.show()

5.散点图绘制

散点图基本绘制

绘制一个基本的散点图。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [10, 8, 12, 15, 7]

# 绘制散点图
plt.scatter(x, y, label='Data Points', color='blue', marker='o')

# 添加标题和标签
plt.title('基本散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.scatter(x, y, label='Data Points', color='blue', marker='o'):这行代码绘制了散点图。xy分别是X轴和Y轴的数据,label用于设置图例标签,color设置散点的颜色,marker指定散点的样式。

散点图颜色映射

使用颜色映射来为散点图中的数据点添加颜色。下面是一个带有颜色映射的散点图示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
colors = np.random.rand(100)  # 随机生成颜色数据

# 绘制散点图,使用颜色映射
plt.scatter(x, y, c=colors, cmap='viridis', label='Data Points')

# 添加标题和标签
plt.title('散点图颜色映射')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 添加颜色映射条
plt.colorbar()

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • c=colors:通过c参数指定颜色数据。
  • cmap='viridis':通过cmap参数指定颜色映射。

散点图大小映射

根据数据的大小来映射散点的大小。下面是一个带有大小映射的散点图示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
sizes = np.random.rand(100) * 100  # 随机生成大小数据

# 绘制散点图,使用大小映射
plt.scatter(x, y, s=sizes, label='Data Points', alpha=0.7)

# 添加标题和标签
plt.title('散点图大小映射')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • s=sizes:通过s参数指定大小数据。
  • alpha=0.7:通过alpha参数设置散点的透明度。

6.条形图绘制

水平条形图

绘制一个水平条形图。

import matplotlib.pyplot as plt

# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 50, 40, 60]

# 绘制水平条形图
plt.barh(categories, values, color='skyblue')

# 添加标题和标签
plt.title('水平条形图')
plt.xlabel('值')
plt.ylabel('类别')

# 显示图表
plt.show()
  • plt.barh(categories, values, color='skyblue'):这行代码绘制了水平条形图。categories是类别标签,values是条形的值,color设置条形的颜色。

垂直条形图

绘制一个垂直条形图。

import matplotlib.pyplot as plt

# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values = [30, 50, 40, 60]

# 绘制垂直条形图
plt.bar(categories, values, color='salmon')

# 添加标题和标签
plt.title('垂直条形图')
plt.xlabel('类别')
plt.ylabel('值')

# 显示图表
plt.show()
  • plt.bar(categories, values, color='salmon'):这行代码绘制了垂直条形图,参数设置与水平条形图类似。

分组条形图和堆积条形图

分组条形图和堆积条形图可以通过调整数据和条形的宽度来创建。以下是一个示例:

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
categories = ['Category A', 'Category B', 'Category C', 'Category D']
values1 = [30, 50, 40, 60]
values2 = [20, 40, 60, 30]
width = 0.35  # 条形的宽度

# 计算每个类别的中心位置
x = np.arange(len(categories))

# 绘制分组条形图
plt.bar(x - width/2, values1, width, label='Group 1', color='skyblue')
plt.bar(x + width/2, values2, width, label='Group 2', color='salmon')

# 添加标题和标签
plt.title('分组条形图')
plt.xlabel('类别')
plt.ylabel('值')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.bar(x - width/2, values1, width, label='Group 1', color='skyblue'):这行代码绘制了两组分组条形图。x - width/2用于确定第一组的位置,x + width/2用于确定第二组的位置。

7.直方图绘制

单变量直方图

绘制一个单变量直方图,以探索单个变量的分布。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据(单变量)
data = np.random.randn(1000)

# 绘制单变量直方图
plt.hist(data, bins=20, color='skyblue', edgecolor='black')

# 添加标题和标签
plt.title('单变量直方图')
plt.xlabel('值')
plt.ylabel('频率')

# 显示图表
plt.show()
  • plt.hist(data, bins=20, color='skyblue', edgecolor='black'):这行代码绘制了单变量直方图。data是要分析的数据,bins参数指定了直方图的箱数,color设置直方图的颜色,edgecolor设置边界颜色。

双变量直方图

绘制一个双变量直方图,用于探索两个变量之间的关系。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据(双变量)
x = np.random.randn(1000)
y = 2 * x + np.random.randn(1000)

# 绘制双变量直方图
plt.hist2d(x, y, bins=20, cmap='viridis')

# 添加标题和标签
plt.title('双变量直方图')
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 添加颜色条
plt.colorbar()

# 显示图表
plt.show()
  • plt.hist2d(x, y, bins=20, cmap='viridis'):这行代码绘制了双变量直方图。xy是两个变量,bins参数指定了直方图的箱数,cmap参数设置颜色映射。

直方图密度曲线

直方图密度曲线也被称为核密度估计,它可用于估计数据的连续概率密度。

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import norm

# 创建示例数据
data = np.random.randn(1000)

# 绘制直方图
plt.hist(data, bins=20, density=True, color='skyblue', alpha=0.7, edgecolor='black')

# 绘制密度曲线
mu, std = norm.fit(data)
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)

# 添加标题和标签
plt.title('直方图和密度曲线')
plt.xlabel('值')
plt.ylabel('密度')

# 显示图表
plt.show()
  • plt.hist(data, bins=20, density=True, color='skyblue', alpha=0.7, edgecolor='black'):这行代码绘制了直方图,density=True参数将频率转换为密度。
  • norm.fit(data):使用正态分布拟合数据以绘制密度曲线。
  • norm.pdf(x, mu, std):使用正态分布的概率密度函数绘制密度曲线。

8.饼图绘制

基本饼图

绘制一个基本的饼图,以表示数据占比。

import matplotlib.pyplot as plt

# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']

# 绘制基本饼图
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90)

# 添加标题
plt.title('基本饼图')

# 显示图表
plt.show()
  • plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90):这行代码绘制了基本饼图。sizes是数据占比,labels是每个切片的标签,colors是切片颜色,autopct用于在饼图中显示百分比,startangle指定饼图的起始角度。

饼图切片突出和排序

可以通过突出某个切片来强调数据,也可以通过排序来改变切片的顺序。

import matplotlib.pyplot as plt

# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']

# 突出切片 B
explode = (0, 0.1, 0, 0)

# 绘制突出切片的饼图并排序
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, explode=explode, shadow=True)

# 添加标题
plt.title('突出切片和排序的饼图')

# 显示图表
plt.show()
  • explode = (0, 0.1, 0, 0):通过explode参数,我们突出了切片 B。
  • shadow=True:为饼图添加阴影效果。

饼图标签和百分比

可以在饼图上添加标签和百分比。

import matplotlib.pyplot as plt

# 创建示例数据
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
colors = ['skyblue', 'salmon', 'lightgreen', 'lightcoral']

# 绘制饼图并添加标签和百分比
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%', startangle=90, pctdistance=0.85)

# 添加标题
plt.title('带标签和百分比的饼图')

# 显示图表
plt.show()
  • autopct='%1.1f%%':通过autopct参数,我们在饼图中显示百分比。
  • pctdistance=0.85:通过pctdistance参数,我们调整了百分比标签的位置。

9.坐标系

轴范围和刻度设置

可以使用plt.xlim()plt.ylim()函数设置X轴和Y轴的范围,并使用plt.xticks()plt.yticks()函数设置刻度。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制图表
plt.plot(x, y, label='sin(x)')

# 设置X轴和Y轴范围
plt.xlim(0, 10)
plt.ylim(-1, 1)

# 设置X轴和Y轴刻度
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])

# 添加标题
plt.title('坐标系范围和刻度设置')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.xlim(0, 10):通过plt.xlim()函数,我们设置了X轴范围为0到10。
  • plt.ylim(-1, 1):通过plt.ylim()函数,我们设置了Y轴范围为-1到1。
  • plt.xticks(np.arange(0, 11, 2)):通过plt.xticks()函数,我们设置了X轴的刻度为0到10,步长为2。
  • plt.yticks([-1, -0.5, 0, 0.5, 1]):通过plt.yticks()函数,我们设置了Y轴的刻度为指定的值。

轴标签和标题

可以使用plt.xlabel()plt.ylabel()函数设置X轴和Y轴的标签,使用plt.title()函数设置标题。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制图表
plt.plot(x, y, label='sin(x)')

# 设置X轴和Y轴标签
plt.xlabel('X轴')
plt.ylabel('Y轴')

# 添加标题
plt.title('坐标系标签和标题设置')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.xlabel('X轴'):通过plt.xlabel()函数,我们设置了X轴的标签。
  • plt.ylabel('Y轴'):通过plt.ylabel()函数,我们设置了Y轴的标签。
  • plt.title('坐标系标签和标题设置'):通过plt.title()函数,我们设置了图表的标题。

网格线设置

可以使用plt.grid()函数来设置网格线的显示和样式。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)

# 绘制图表
plt.plot(x, y, label='sin(x)')

# 启用网格线
plt.grid(True)

# 添加标题
plt.title('网格线设置')

# 显示图例
plt.legend()

# 显示图表
plt.show()
  • plt.grid(True):通过plt.grid()函数,我们启用了网格线。

10.图形布局

子图分割和排列

使用plt.subplot()函数来创建和排列子图。此函数的参数包括行数、列数和子图的索引。

import matplotlib.pyplot as plt

# 创建一个2x2的子图布局,选择第一个子图
plt.subplot(2, 2, 1)
plt.plot([1, 2, 3, 4])
plt.title('子图1')

# 选择第二个子图
plt.subplot(2, 2, 2)
plt.plot([4, 3, 2, 1])
plt.title('子图2')

# 选择第三个子图
plt.subplot(2, 2, 3)
plt.plot([1, 2, 1, 2])
plt.title('子图3')

# 选择第四个子图
plt.subplot(2, 2, 4)
plt.plot([2, 1, 2, 1])
plt.title('子图4')

# 调整子图间距
plt.tight_layout()

# 显示图表
plt.show()

在这个示例中,创建了一个2x2的子图布局,并在每个子图中绘制了不同的数据。plt.subplot()函数用于选择要绘制的子图,使用plt.title()函数为每个子图添加标题。plt.tight_layout()用于自动调整子图的间距,以确保它们适合图表。

坐标系网格布局

Matplotlib还允许在单个图形中创建多个坐标系,以更复杂的方式排列它们。

import matplotlib.pyplot as plt

# 创建一个包含2x2坐标系的图形
fig, axes = plt.subplots(2, 2)

# 在每个坐标系中绘制数据
axes[0, 0].plot([1, 2, 3, 4])
axes[0, 0].set_title('坐标系1')

axes[0, 1].plot([4, 3, 2, 1])
axes[0, 1].set_title('坐标系2')

axes[1, 0].plot([1, 2, 1, 2])
axes[1, 0].set_title('坐标系3')

axes[1, 1].plot([2, 1, 2, 1])
axes[1, 1].set_title('坐标系4')

# 调整子图间距
plt.tight_layout()

# 显示图表
plt.show()

在这个示例中,使用plt.subplots()创建了一个包含2x2坐标系的图形,然后在每个坐标系中绘制了不同的数据。最后,plt.tight_layout()用于自动调整坐标系之间的间距。

11.多轴图绘制

共享轴和独立轴

使用plt.subplots()函数创建具有共享或独立轴的多轴图。

共享轴

import matplotlib.pyplot as plt
import numpy as np

# 创建一个具有共享X轴的多轴图
fig, axes = plt.subplots(2, 1, sharex=True)

# 绘制数据到不同子图
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

axes[0].plot(x, y1)
axes[0].set_title('共享X轴的子图1')

axes[1].plot(x, y2)
axes[1].set_title('共享X轴的子图2')

# 显示图表
plt.show()

在这个示例中,创建了一个具有共享X轴的多轴图,两个子图共享相同的X轴。

独立轴

import matplotlib.pyplot as plt

# 创建具有独立轴的多轴图
fig, axes = plt.subplots(1, 2, sharey=True)

# 绘制数据到不同子图
data1 = [1, 2, 3, 4, 5]
data2 = [5, 4, 3, 2, 1]

axes[0].plot(data1)
axes[0].set_title('独立Y轴的子图1')

axes[1].plot(data2)
axes[1].set_title('独立Y轴的子图2')

# 显示图表
plt.show()

在这个示例中,创建了一个具有独立Y轴的多轴图,两个子图具有不同的Y轴。

双坐标系图和次坐标轴

使用twinx()函数创建双坐标系图,允许在同一图中绘制具有不同Y轴的数据。

import matplotlib.pyplot as plt

# 创建双坐标系图
fig, ax1 = plt.subplots()

data1 = [1, 2, 3, 4, 5]
data2 = [10, 8, 6, 4, 2]

# 绘制第一个数据集
ax1.plot(data1, color='skyblue', label='数据集1')
ax1.set_xlabel('X轴')
ax1.set_ylabel('Y轴1', color='skyblue')
ax1.legend(loc='upper left')

# 创建第二个Y轴
ax2 = ax1.twinx()

# 绘制第二个数据集
ax2.plot(data2, color='salmon', label='数据集2')
ax2.set_ylabel('Y轴2', color='salmon')
ax2.legend(loc='upper right')

# 添加标题
plt.title('双坐标系图')

# 显示图表
plt.show()

在这个示例中,创建了一个双坐标系图,同时绘制了两个数据集,每个数据集具有不同的Y轴。使用ax1.twinx()来创建第二个Y轴,并在同一图中绘制两个数据集。

次坐标轴

使用secondary_xaxis()secondary_yaxis()函数来创建次坐标轴,以表示不同尺度的数据。这通常用于在同一图中显示不同单位的数据。

12.高级图形元素

图形注释和箭头

使用plt.annotate()函数添加图形注释和箭头。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3]
y = [2, 4, 6]

# 绘制数据
plt.plot(x, y)

# 添加图形注释和箭头
plt.annotate('重要点', xy=(2, 4), xytext=(2.5, 5),
             arrowprops=dict(arrowstyle='->', lw=1.5),
             fontsize=12, color='red')

# 显示图表
plt.show()

在这个示例中,我们使用plt.annotate()函数在数据点 (2, 4) 处添加了一个注释文本,并使用箭头指向 (2.5, 5) 处。

图例高级用法

Matplotlib的图例允许自定义图例的位置、标签、颜色等属性。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3]
y1 = [2, 4, 6]
y2 = [3, 5, 7]

# 绘制数据
plt.plot(x, y1, label='数据集1', color='skyblue')
plt.plot(x, y2, label='数据集2', color='salmon')

# 自定义图例
plt.legend(loc='upper left', title='数据集', title_fontsize=12, fontsize=10)

# 显示图表
plt.show()

在这个示例中,使用plt.legend()函数自定义了图例的位置、标题、标题字体大小和图例项的字体大小。

区域填充和阴影效果

使用fill_between()函数来填充区域和创建阴影效果。

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

# 绘制数据
plt.plot(x, y1, label='sin(x)', color='skyblue')
plt.plot(x, y2, label='cos(x)', color='salmon')

# 填充区域
plt.fill_between(x, y1, y2, where=(y1 > y2), interpolate=True, color='lightgray', alpha=0.5, label='sin(x) > cos(x)')

# 自定义图例
plt.legend()

# 显示图表
plt.show()

在这个示例中,使用plt.fill_between()函数填充了两个数据集之间 sin(x) > cos(x) 的区域,并为填充区域添加了颜色和透明度。添加了图例以标识填充区域。

13.3D数据可视化

三维散点图和曲面图

使用Axes3D子模块来创建三维散点图和曲面图。

三维散点图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# 创建示例数据
x = np.random.rand(100)
y = np.random.rand(100)
z = np.random.rand(100)

# 创建三维散点图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c='b', marker='o', label='随机数据')

# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')

# 添加图例
ax.legend()

# 显示图表
plt.show()

在这个示例中,使用Axes3D子模块创建了一个三维散点图,其中 xyz 是随机生成的数据。

三维曲面图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# 创建示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

# 创建三维曲面图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(x, y, z, cmap='viridis', label='三维曲面')

# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')

# 添加图例
ax.legend()

# 显示图表
plt.show()

在这个示例中,用Axes3D子模块创建了一个三维曲面图,其中 xy 是网格化的坐标,z 是一个函数的值。

等高线图和热力图

Matplotlib允许创建三维等高线图和热力图,用于可视化等高线和数据热力分布。

三维等高线图

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

# 创建示例数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
x, y = np.meshgrid(x, y)
z = np.sin(np.sqrt(x**2 + y**2))

# 创建三维等高线图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.contour(x, y, z, cmap='viridis', levels=20)

# 添加标签
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')

# 显示图表
plt.show()

在这个示例中,用Axes3D子模块创建了一个三维等高线图。

热力图

import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
data = np.random.rand(10, 10)

# 创建热力图
plt.imshow(data, cmap='coolwarm', interpolation='nearest')
plt.colorbar()

# 显示图表
plt.show()

这个示例演示了如何创建热力图,其中 data 是一个矩阵。

3D 动画和交互式控件

Matplotlib还支持3D动画和交互式控件,允许你创建交互式的三维图形。

14.图形导出和美化

导出图形文件

使用Matplotlib将图形保存为各种文件格式,如PNG、JPG、SVG、PDF等。

import matplotlib.pyplot as plt

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制数据
plt.plot(x, y, label='数据集')

# 自定义图形
plt.title('导出图形文件示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()

# 保存图形为PNG文件
plt.savefig('sample_plot.png', dpi=300, bbox_inches='tight')

# 保存图形为PDF文件
plt.savefig('sample_plot.pdf', bbox_inches='tight')

# 显示图表
plt.show()

在这个示例中,用plt.savefig()函数将图形保存为PNG和PDF文件,可以使用不同的文件扩展名来指定不同的文件格式。

图形风格设置

Matplotlib允许设置图形的风格,包括背景、网格线、字体和刻度等。

import matplotlib.pyplot as plt

# 设置图形风格
plt.style.use('seaborn-darkgrid')

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制数据
plt.plot(x, y, label='数据集')

# 自定义图形
plt.title('图形风格设置示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()

# 显示图表
plt.show()

在这个示例中,用plt.style.use()函数设置了图形的风格为seaborn-darkgrid,选择不同的风格来自定义图形外观。

自定义色彩和配色方案

自定义色彩和配色方案,以满足特定的需求。

import matplotlib.pyplot as plt

# 自定义色彩和配色方案
colors = ['red', 'green', 'blue', 'orange', 'purple']

# 创建示例数据
x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

# 绘制数据,使用自定义色彩
for i in range(len(x)):
    plt.plot(x[i], y[i], label=f'数据点 {i+1}', color=colors[i])

# 自定义图形
plt.title('自定义色彩和配色方案示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()

# 显示图表
plt.show()

在这个示例中,自定义的颜色列表colors来为每个数据点选择不同的颜色。

参考

matplotlib官网:https://matplotlib.org/stable/users/index


   转载规则


《Python数据分析-matplotlib》 Bevis23 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
python数据分析-seaborn python数据分析-seaborn
引言在现代数据科学和数据分析中,可视化是一项至关重要的任务。可视化图表可以帮助我们更好地理解数据、发现趋势和模式,以及与他人分享我们的发现。Python作为一种强大的编程语言,拥有许多出色的库,用于创建各种类型的可视化图表。 在数据可视化领
2023-10-14
下一篇 
python数据分析-pandas python数据分析-pandas
引言数据分析是当今世界中日益重要的技能之一。随着大量数据的产生和积累,数据分析能力已成为了解、预测和解决各种问题的关键工具。无论你是一名数据分析师,一名学生,还是一个对数据分析感兴趣的人,了解如何使用Python和Pandas进行数据分析都
2023-10-13
  目录
切换