matplotlib-logos

什么是Matplotlib?

Matplotlib是一个用于绘制高质量图形的Python库。无论你是要绘制简单的折线图、柱状图、散点图,还是复杂的3D图形、动画等,Matplotlib都能满足你的需求。该库的灵活性和丰富的功能使其成为了数据可视化的首选。

Matplotlib的特点

Matplotlib具有许多令人惊叹的特点,这些特点使其在数据可视化领域广受欢迎:

  • 简单易用:Matplotlib的API设计简单直观,几行代码即可生成漂亮的图形。
  • 灵活性:Matplotlib提供了丰富的配置选项,可轻松自定义图形的各个方面,如线条样式、颜色、标注等。
  • 多种图形类型:Matplotlib支持绘制各种类型的图形,包括折线图、散点图、柱状图、饼图、3D图等,满足你的各种可视化需求。
  • 高质量输出:Matplotlib可以输出高质量的图形,支持多种输出格式,如PNG、SVG、PDF等。
  • 丰富的扩展能力:Matplotlib可以与其他Python库如NumPy、Pandas等进行无缝集成,进一步扩展其功能和应用范围。

安装Matplotlib

在开始之前,我们首先需要安装Matplotlib。如果你已经安装了Python,可以通过以下命令使用pip进行安装:

1
pip install matplotlib

如果你是使用Anaconda发行版,可以使用以下命令进行安装:

1
conda install matplotlib

使用Matplotlib

基础图表

下面是一个简单的例子来展示Matplotlib的基本用法:

1
2
3
4
5
6
7
8
9
10
11
12
import random

import matplotlib.pyplot as plt

x = range(31) # x坐标轴数据集
y = [random.uniform(-10, 15) for i in x] # y坐标轴数据集

plt.figure() # 创建一个画布

plt.plot(x, y)

plt.show()

基本图表

自定义

  1. 标题
1
plt.title('Temperature variation chart')
  1. 坐标轴标签:
1
2
plt.xlabel('Time')
plt.ylabel('Temperature')
  1. 图例
1
2
3
plt.plot(hour, tep, label='Current temperature')
# plt.legend(loc=1) # 使用位置代码
plt.legend(loc='upper right') # 直接使用参数
参数 位置代码 描述
best 0 自动选择最佳位置,默认值
upper right 1 右上角
upper left 2 左上角
lower left 3 左下角
lower right 4 右下角
right 5 右侧中间
center left 6 左侧中间
center right 7 右侧中间
lower center 8 底部中间
upper center 9 顶部中间
center 10 图中央
  1. 自定义线的样式、颜色和宽度
  • 颜色
颜色名称 缩写 示例
蓝色 ‘b’ plt.plot(x, y, ‘b’)
绿色 ‘g’ plt.plot(x, y, ‘g’)
红色 ‘r’ plt.plot(x, y, ‘r’)
青色 ‘c’ plt.plot(x, y, ‘c’)
品红 ‘m’ plt.plot(x, y, ‘m’)
黄色 ‘y’ plt.plot(x, y, ‘y’)
黑色 ‘k’ plt.plot(x, y, ‘k’)
白色 ‘w’ plt.plot(x, y, ‘w’)
自定义 plt.plot(x, y, color=’red’)
  • 线条样式
样式 描述
‘-‘ 实线
‘—‘ 虚线
‘-.’ 点划线
‘:’ 点线
  • 线条宽度
宽度 描述
0.5 细线条
1 中等线条
1.5 较粗线条
2 非常粗线条
自定义 数值越大线条越粗

使用这些参数,可以通过传递给plot函数的colorlinestylelinewidth参数来灵活地设置图表的样式。

1
plt.plot(x, y, color='green', linestyle='--', linewidth=2)
  1. 坐标轴刻度
1
2
plt.xticks(hour[::4])
plt.yticks(list(range(0, 20, 2)))
  1. 坐标点

marker参数决定了坐标点的形状,’o’表示圆圈,’s’表示方块,’^’表示向上的三角形,’v’表示向下的三角形

markersize参数用于控制坐标点的大小,可以是一个数字,表示坐标点的直径大小,也可以是一个数组,用于指定不同坐标点的大小。例如,markersize=10表示坐标点的直径为10个像素。

markerfacecolor参数用于设置坐标点的填充颜色,markeredgecolor参数用于设置坐标点的边缘颜色。你可以使用各种颜色的名称(如’red’、’blue’等),也可以使用RGB值(如(0.1, 0.2, 0.3))来指定。如果想要坐标点没有填充颜色,可以将markerfacecolor设置为’none’。

1
plt.plot(hour, tep, marker='^', markersize=10, markerfacecolor='b', markeredgecolor='g')
  1. 网格线
1
plt.grid(True, color='b', linestyle='--', linewidth=0.5)
  1. 保存图表

Matplotlib支持保存图表为多种图片格式,包括PNG、JPEG、BMP等。您只需调用savefig()函数,并指定文件路径和文件类型,即可将图表保存到指定的位置。

1
figure.savefig('my_chart.png', dpi=300) 

这行代码将会将图表保存在当前工作目录下,命名为my_chart.png。参数dpi表示图像的分辨率,您可以根据需要进行调整。

自定义图表

折线图的作用

  1. 显示趋势和变化:折线图非常适合用于显示数据随时间、顺序或其他连续变量而发生的变化。通过观察折线的走向,人们可以很容易地看出数据的趋势,包括上升、下降、平稳或周期性变化等。

  2. 识别关联关系:折线图可以用来显示不同变量之间的关联关系。通过在同一张图上绘制多条折线,可以直观地比较不同变量之间的趋势,找出它们之间的相关性和关联规律。

  3. 检测异常值:折线图在检测异常值方面非常有用。异常值通常会表现为折线图上的突变或偏离正常趋势,从而帮助分析人员快速识别并深入研究可能存在的异常情况。

  4. 预测未来走势:基于历史数据的趋势,折线图可以用来进行未来走势的预测和预测。通过分析趋势线的走向和速度,人们可以尝试预测未来的数据变化。

  5. 比较不同组的数据:折线图可以同时展示多组数据的趋势,帮助人们比较不同组的数据表现,从而更好地理解数据之间的差异和相似之处。

折线图的实现

步骤一:导入Matplotlib库和准备数据

1
2
3
4
5
import matplotlib.pyplot as plt

# 准备数据
x = [1, 2, 3, 4, 5] # x轴数据
y = [10, 15, 13, 18, 16] # y轴数据

步骤二:绘制折线图并配置样式

使用plot函数绘制折线图,并配置样式。您可以根据需要设置线条的颜色、样式、宽度以及标记。

1
plt.plot(x, y, color='green', linestyle='--', linewidth=2, marker='o', markersize=8, label='折线图示例')  

在上述代码中,color参数指定线条的颜色,linestyle参数指定线条的样式,linewidth参数指定线条的宽度,marker参数指定标记的样式,markersize指定标记的大小,label参数指定图例的标签。

步骤三:添加标题和标签

您可以为折线图添加标题和轴标签,增加图表的可读性。

1
2
3
plt.title('折线图示例')  # 添加标题
plt.xlabel('X轴标签') # 添加X轴标签
plt.ylabel('Y轴标签') # 添加Y轴标签

步骤四:显示图例

如果您希望在图中添加图例,可以使用legend函数,例如:

1
plt.legend()  # 显示图例

Line Chart

散点图的作用

  1. 显示变量之间的关系:散点图可以有效地显示两个变量之间的关系。通过在图表中绘制数据点,人们可以观察到数据的分布情况,并更直观地认识到变量之间的相关性。

  2. 发现趋势和模式:通过观察散点图中数据点的分布,人们可以发现数据中的趋势和模式。例如,当数据点呈现出一种线性的分布模式时,表明两个变量之间存在着线性关系。

  3. 检测异常值:散点图可以帮助人们识别和检测数据中的异常值。异常值通常表现为离群的数据点,通过观察散点图,人们可以轻松地辨别出这些异常值,并进一步分析这些离群点的原因和影响。

  4. 比较不同组的数据:散点图可以同时显示多个数据组,从而帮助比较不同组的数据。通过在同一张图上绘制不同的数据组的散点图,人们可以直观地了解和比较不同组之间的差异和相似之处。

  5. 数据聚类和分类:散点图可以协助人们进行数据聚类和分类的工作。通过观察散点图中不同数据点的位置和分布,可以辅助进行数据点所属的类别和群组的划分,进而进行进一步的分析和研究。

散点图的实现

  1. 导入所需的库
    首先,需要导入matplotlib.pyplot和numpy库:
1
2
import matplotlib.pyplot as plt
import numpy as np
  1. 生成数据
    使用numpy库生成一些示例数据(x和y坐标):
1
2
3
np.random.seed(0)
x = np.random.randn(100)
y = np.random.randn(100)
  1. 绘制散点图
    使用plt.scatter()函数绘制散点图,可以指定x和y坐标的值:
1
plt.scatter(x, y)
  1. 样式配置
    设置标题和坐标轴标签:
1
2
3
plt.title('Scatter Plot Example')
plt.xlabel('X-axis Label')
plt.ylabel('Y-axis Label')

调整坐标轴范围:

1
2
plt.xlim(-3, 3)
plt.ylim(-3, 3)

调整点的大小和颜色:

1
2
3
4
5
# 设置点的大小
plt.scatter(x, y, s=50)

# 设置点的颜色
plt.scatter(x, y, c='r')

设置点的透明度:

1
plt.scatter(x, y, alpha=0.5)

设置点的形状:

1
plt.scatter(x, y, marker='o')

添加图例:

1
2
plt.scatter(x, y, label='Data Points')
plt.legend()
  1. 显示图形
    最后调用plt.show()函数显示绘制的散点图:
1
plt.show()

Scatter Plot

柱状图的作用

  1. 比较不同类别间的数据:柱状图可以清晰地展示不同类别之间的数据差异。通过柱状图,人们可以直观地比较不同类别的数据大小、数量或比例,从而更好地理解数据之间的关系。

  2. 突出数据的变化趋势:柱状图能够有效地突出数据的变化趋势,特别适用于展示随时间变化的数据或者不同条件下数据的对比情况。通过柱状图,人们可以清晰地观察到数据的波动和趋势变化。

  3. 显示数据分布的离散程度:柱状图可以用来展示数据的离散程度,包括列出每个类别中的数据数量或者比例,帮助人们更好地理解数据的分布情况。

  4. 揭示数据间的关联关系:当柱状图中包含多个组的数据时,可以通过柱状图清晰地展示不同组数据之间的关联关系,帮助人们理解数据之间的相互影响。

  5. 支持决策制定:柱状图可以直观地向决策者展示数据,帮助他们更好地理解现状和趋势,从而做出更明智的决策。

柱状图的实现

  1. 导入所需的库
    首先,需要导入matplotlib.pyplot和numpy库:
1
2
import matplotlib.pyplot as plt
import numpy as np
  1. 生成数据
    使用numpy库生成一些示例数据(x坐标和对应的柱状图高度):
1
2
x = np.array(['A', 'B', 'C', 'D', 'E'])
heights = np.array([10, 15, 7, 12, 9])
  1. 绘制柱状图
    使用plt.bar()函数绘制柱状图,可以指定x坐标和对应的高度:
1
plt.bar(x, heights)
  1. 样式配置
    设置标题和坐标轴标签:
1
2
3
plt.title('Bar Chart Example')
plt.xlabel('Categories')
plt.ylabel('Values')

调整柱状图颜色:

1
plt.bar(x, heights, color='blue')

调整柱状图的宽度:

1
plt.bar(x, heights, width=0.5)

设置柱状图边框显示:

1
plt.bar(x, heights, edgecolor='black')

设置柱状图透明度:

1
plt.bar(x, heights, alpha=0.7)

添加柱状图数值标签:

1
2
for i, v in enumerate(heights):
plt.text(i, v + 0.5, str(v), ha='center')

在上面的示例中,我们使用enumerate()函数遍历柱子的高度值,并通过plt.text()函数在每根柱子的顶部(x, y + 0.2)位置添加了对应的数值标签。其中,水平对齐方式选择了’center’,使数值标签水平居中显示,使数值标签位于柱子顶部。

plt.text()函数用于在图表上指定的位置添加文本标签,其语法如下:

1
plt.text(x, y, text, ha='center', va='bottom')
  • x, y:文本标签的横纵坐标位置
  • text:要显示的文本内容
  • ha:水平对齐方式,可选值包括{‘center’, ‘right’, ‘left’}
  • va:垂直对齐方式,可选值包括{‘top’, ‘center’, ‘bottom’}
  1. 显示图形
    最后调用plt.show()函数显示绘制的柱状图:
1
plt.show()

Bar Chart

饼图的作用

  1. 展示比例和构成:饼图可以清晰地展示各个类别数据在整体中的比例和构成情况。通过饼图,人们可以直观地看到每个部分所占的比例,便于比较不同类别数据之间的相对大小。

  2. 突出重点:饼图可以将数据的关键部分突出展示,帮助观察者快速理解哪些部分对整体有较大影响,以及各个部分之间的相互关系。

  3. 显示数据分布:饼图可以用于展示数据的分布情况,特别适用于呈现具有明显主体比例和少数几个较小部分的数据构成。

  4. 强调相对比例:饼图能够强调数据之间的相对比例,让观察者更容易理解不同类别数据之间的比例关系,从而更清晰地识别出主要的和次要的部分。

  5. 形象化呈现数据:饼图通过形象化的方式呈现数据,易于理解和传达,适用于向非专业人士展示数据分布情况。

需要注意的是,饼图在展示过多类别或者数据比例差异不大的情况下,可能会导致解读困难,因此在实际应用中,人们需要根据具体情况选择合适的数据可视化方式。

饼图的实现

  1. 导入所需的库
    首先,需要导入matplotlib.pyplot和numpy库:
1
2
import matplotlib.pyplot as plt
import numpy as np
  1. 生成数据
    使用numpy库生成一些示例数据(每个部分的数值和标签):
1
2
labels = ['A', 'B', 'C', 'D']
sizes = [15, 30, 45, 10]
  1. 绘制饼图
    使用plt.pie()函数绘制饼图,可以指定每个部分的数值和标签:
1
plt.pie(sizes, labels=labels)
  1. 样式配置
    设置标题:
1
plt.title('Pie Chart Example')

调整饼图起始角度和旋转方向:

1
plt.pie(sizes, labels=labels, startangle=90, counterclock=False)
  • startangle:起始角度,指定饼图开始绘制的角度,默认为0(即从3点钟方向开始)。可以通过设置startangle来改变起始角度。

突出显示某一部分:

1
2
explode = (0, 0.1, 0, 0)  # 用于突出显示第二个部分
plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%')
  • explode:用于突出显示某一部分,可以设置各部分的偏移量,以突出显示。偏移量越大,突出效果越明显。
  • autopct:设置显示百分比的格式,可以显示在饼图上。

添加阴影和颜色:

1
plt.pie(sizes, labels=labels, shadow=True, colors=['gold', 'yellowgreen', 'lightcoral', 'lightskyblue'])
  • shadow:添加阴影效果,默认为False。
  • colors:设置饼图各部分的颜色,可以是颜色名称或十六进制颜色码。
  1. 显示图形
    最后调用plt.show()函数显示绘制的饼图:
1
plt.show()

Pie Chart

直方图的作用

  1. 展示数据分布:直方图能够清晰地展示数据的分布情况,帮助人们了解数据的集中程度、变异程度以及偏差程度。通过直方图,可以直观地观察数据的分布形态,包括数据的平均值、中位数、标准差等统计特征。

  2. 观察数据频数分布:直方图能够将数据分组并展示每个组的频数,帮助人们理解数据在不同取值范围内的频率分布情况。这对于识别数据的分布特征以及发现数据中的规律和趋势非常有帮助。

  3. 检测数据异常值:通过直方图,人们可以较为容易地识别出数据中的异常值,因为异常值通常会在整体分布中呈现出跳出正常范围的特征,通过直方图可以清晰地观察到这些异常值的存在。

  4. 比较不同数据分布:直方图可以用于比较不同数据集之间的分布情况,帮助人们发现数据之间的相似性和差异性,以及进行横向对比和纵向对比。

  5. 支持决策制定:通过直方图,决策者可以更加清晰地了解数据的分布情况和特征,从而做出更准确的决策。

直方图的实现

  1. 导入所需的库
    首先,导入matplotlib.pyplot和numpy库:
1
2
import matplotlib.pyplot as plt
import numpy as np
  1. 生成数据
    使用numpy库生成一些示例数据:
1
data = np.random.randn(1000)  # 生成1000个随机数据
  1. 绘制直方图
    使用plt.hist()函数绘制直方图:
1
plt.hist(data)
  1. 样式配置和参数详解
  • bins:指定直方图的箱子数量或间隔,默认为10。可以根据数据分布情况调整箱子的数量,以获得更好的可视化效果。

    1
    plt.hist(data, bins=20)
  • color:设置直方图的颜色。

    1
    plt.hist(data, color='steelblue')
  • edgecolor:设置直方图边缘颜色。

    1
    plt.hist(data, edgecolor='black')
  • alpha:设置直方图的透明度,取值范围为0-1之间。值越小越透明。

    1
    plt.hist(data, alpha=0.5)
  • density:设置是否显示概率密度曲线,默认为False。如果设置为True,则直方图的高度表示概率密度而不是频数。

    1
    plt.hist(data, density=True)
  • cumulative:设置是否显示累积直方图,默认为False。如果设置为True,则直方图将显示累积频数。

    1
    plt.hist(data, cumulative=True)
  1. 添加标签和标题
    通过调用plt.xlabel()、plt.ylabel()和plt.title()函数,设置x轴、y轴标签和图表标题。
1
2
3
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Histogram Example')
  1. 显示图形
    最后调用plt.show()函数显示绘制的直方图:
1
plt.show()

Histogram

首先,我们需要创建一些示例数据,例如两个数组,表示两条线的数据。

1
2
3
4
5
6
7
import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
x = np.arange(0, 10, 0.1) # x轴数据
y1 = np.sin(x) # 第一条线的y轴数据
y2 = np.cos(x) # 第二条线的y轴数据

接下来,我们可以使用Matplotlib来绘制这些数据。这里我用的是最基本的方式,就是使用plt.plot()方法来绘制线图。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 绘制双线图
plt.plot(x, y1, label='sin(x)') # 绘制第一条线
plt.plot(x, y2, label='cos(x)') # 绘制第二条线

# 添加图例
plt.legend()

# 添加标题和坐标轴标签
plt.title('Sin and Cos Waves') # 添加标题
plt.xlabel('x') # x轴标签
plt.ylabel('y') # y轴标签

# 显示图形
plt.show()

Sin and Cos Waves

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import matplotlib.pyplot as plt

# 创建一个2x2的子图
fig, ax = plt.subplots(2, 2)

# 在第一个子图中绘制折线图
ax[0, 0].plot([1, 2, 3, 4], [1, 4, 9, 16])
ax[0, 0].set_title('折线图')

# 在第二个子图中绘制散点图
ax[0, 1].scatter([1, 2, 3, 4], [1, 4, 9, 16])
ax[0, 1].set_title('散点图')

# 在第三个子图中绘制柱状图
ax[1, 0].bar([1, 2, 3, 4], [1, 4, 9, 16])
ax[1, 0].set_title('柱状图')

# 在第四个子图中绘制饼图
ax[1, 1].pie([1, 4, 9, 16], labels=['A', 'B', 'C', 'D'])
ax[1, 1].set_title('饼图')

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

# 显示图表
plt.show()

在这个例子中,我们通过plt.subplots()函数创建了一个2x2的子图,返回的figax对象分别代表了整个图形和子图。接着,我们可以在各个子图中使用ax对象来绘制不同类型的图表,例如折线图、散点图、柱状图和饼图。使用set_title()函数为每个子图设置标题,以使图表更具可读性。

Multisubgraph

问题清单

  1. 图形中文显示问题