介绍:
Matplotlib 是一个非常强大的 Python 绘图库,支持多种不同类型的图表。以下是 Matplotlib 支持的一些常见图表类型:
前情提要:
from matplotlib import rcParams# 设置支持中文的字体 rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体为黑体 rcParams['axes.unicode_minus'] = False # 正常显示负号
如果你要使用中文中必不可少
类型:
2D 图表
-
折线图 (Line Plot)
-
显示数据点之间的连接线,适合展示趋势。
-
import matplotlib.pyplot as plt# 数据:x 轴和 y 轴 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25]# 绘制折线图 plt.plot(x, y)# 添加标题和标签 plt.title("简单的折线图") plt.xlabel("x 轴") plt.ylabel("y 轴")# 显示图形 plt.show()
-
代码解析
-
数据准备:
x
和y
分别是 x 轴和 y 轴的数据。x
轴可以是时间、序列等,y
轴是对应的数值。 -
绘制折线图:
plt.plot(x, y)
用于绘制折线图。x
和y
为输入的数据点。 -
添加标题和标签:
plt.title("简单的折线图")
:设置图表标题。plt.xlabel("x 轴")
:设置 x 轴的标签。plt.ylabel("y 轴")
:设置 y 轴的标签。
-
显示图形:
plt.show()
用于显示绘制的图形。
-
-
自定义折线图
-
多条折线图:可以同时绘制多条折线图,用不同的颜色区分。
-
y2 = [25, 20, 15, 10, 5]
plt.plot(x, y, label="线条 1")
plt.plot(x, y2, label="线条 2", linestyle='--')
plt.legend() # 添加图例
-
-
标记数据点:在折线图上显示每个数据点的位置。
-
plt.plot(x, y, marker='o') # 在数据点上加上圆圈标记
-
-
线条样式:你可以修改线条的样式,例如虚线、点线、颜色等。
-
plt.plot(x, y, linestyle='--', color='r') # 红色虚线
-
-
-
-
散点图 (Scatter Plot)
-
用点表示数据,适合展示两变量之间的关系。
-
import matplotlib.pyplot as plt# 数据:x 轴和 y 轴 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25]# 绘制散点图 plt.scatter(x, y)# 添加标题和标签 plt.title("简单的散点图") plt.xlabel("x 轴") plt.ylabel("y 轴")# 显示图形 plt.show()
-
代码解析
-
数据准备:
x
和y
是两个变量的值,分别对应散点图中的 x 轴和 y 轴。 -
绘制散点图:使用
plt.scatter(x, y)
来绘制散点图。与折线图不同,散点图没有连接线,而是通过独立的点来表示数据。 -
添加标题和标签:
plt.title("简单的散点图")
:设置图表标题。plt.xlabel("x 轴")
:设置 x 轴的标签。plt.ylabel("y 轴")
:设置 y 轴的标签。
-
显示图形:
plt.show()
用于显示图形。
-
-
自定义散点图
- 改变点的大小和颜色:
s
用于控制点的大小。c
用于控制点的颜色。- plt.scatter(x, y, s=100, c='r') # 红色且较大的点
- 使用不同的标记样式:
marker
参数允许选择不同的标记类型(如圆圈、星号等)。- plt.scatter(x, y, marker='*') # 星号标记
- 绘制多个系列:如果你有多个数据集,可以在同一张图上绘制多个散点图。
- y2 = [25, 20, 15, 10, 5]
plt.scatter(x, y, label="系列 1", c='b') # 蓝色点
plt.scatter(x, y2, label="系列 2", c='g') # 绿色点
plt.legend() # 添加图例
- y2 = [25, 20, 15, 10, 5]
- 改变点的大小和颜色:
-
-
条形图 (Bar Plot)
-
使用条形表示数据,适合展示类别数据。
-
import matplotlib.pyplot as plt# 数据 categories = ['苹果', '香蕉', '橙子', '葡萄', '梨'] values = [50, 30, 45, 20, 25]# 创建条形图 plt.bar(categories, values)# 添加标题和标签 plt.title("水果数量") plt.xlabel("水果") plt.ylabel("数量")# 显示图形 plt.show()
-
代码解析:
plt.bar(categories, values)
:绘制条形图,其中categories
是条形图的类别,values
是每个类别对应的值。plt.title("水果数量")
:为图表添加标题。plt.xlabel("水果")
和plt.ylabel("数量")
:为x轴和y轴添加标签。plt.show()
:显示图形。
-
水平条形图
除了竖直的条形图,还可以绘制水平条形图,使用
plt.barh()
。-
import matplotlib.pyplot as plt import numpy as np# 数据 categories = ['苹果', '香蕉', '橙子', '葡萄', '梨'] values1 = [10, 20, 15, 25, 30] values2 = [40, 10, 30, 20, 25]# 创建堆叠条形图 plt.barh(categories, values1, label='类型1') plt.barh(categories, values2, bottom=values1, label='类型2')# 添加标题和标签 plt.title("堆叠条形图") plt.xlabel("水果") plt.ylabel("数量") plt.legend()# 显示图形 plt.show()
-
-
堆叠条形图
如果你有多个数据系列,并且想要在同一类别中显示多个堆叠的条形,可以使用堆叠条形图。堆叠条形图将每个类别的条形分成几个部分,表示不同的数据系列。
-
import matplotlib.pyplot as plt import numpy as np# 数据 categories = ['苹果', '香蕉', '橙子', '葡萄', '梨'] values1 = [10, 20, 15, 25, 30] values2 = [40, 10, 30, 20, 25]# 创建堆叠条形图 plt.bar(categories, values1, label='类型1') plt.bar(categories, values2, bottom=values1, label='类型2')# 添加标题和标签 plt.title("堆叠条形图") plt.xlabel("水果") plt.ylabel("数量") plt.legend()# 显示图形 plt.show()
-
代码解析:
plt.bar(categories, values1)
和plt.bar(categories, values2, bottom=values1)
:这两行代码绘制堆叠条形图,其中第二个bar()
函数通过bottom
参数指定了堆叠的底部。plt.legend()
:为堆叠条形图添加图例。
-
-
-
直方图 (Histogram)
-
用于展示数据的频率分布,常用于描述单一变量。
-
import matplotlib.pyplot as plt # 生成随机数据 data = np.random.randn(1000)# 绘制直方图 plt.hist(data, bins=30, edgecolor='black') # bins: 划分区间的数量# 添加标题和标签 plt.title("随机数据的直方图") plt.xlabel("值") plt.ylabel("频率")# 显示图形 plt.show()
-
代码解析:
np.random.randn(1000)
:生成1000个服从标准正态分布(均值为0,标准差为1)的随机数。plt.hist(data, bins=30, edgecolor='black')
:绘制直方图,bins=30
表示将数据划分成30个区间,edgecolor='black'
为每个条形的边缘设置颜色。plt.title("随机数据的直方图")
:为图表添加标题。plt.xlabel("值")
和plt.ylabel("频率")
:为x轴和y轴添加标签。
-
参数解析:
data
:输入的数据集,可以是任何一维数据(例如列表、数组等)。bins
:指定将数据划分成多少个区间。通常,bins
的值越大,直方图越精细;越小,直方图越粗糙。也可以传入一个区间边界的数组来自定义每个桶的范围。edgecolor
:条形的边缘颜色,通常用于让直方图的条形更加明显。
-
修改直方图的外观
-
改变颜色
- plt.hist(data, bins=30, edgecolor='black', color='skyblue') # 设置条形的颜色
-
使用不同的间隔方式
bins
参数可以接受不同类型的输入:- 整数:表示将数据划分为多少个区间。
- 序列:一个数组,表示区间的具体边界。
- bins = [-3, -2, -1, 0, 1, 2, 3]
plt.hist(data, bins=bins, edgecolor='black')
-
对数刻度
如果数据的范围非常广,可以使用对数刻度来调整y轴显示:
-
plt.hist(data, bins=30, edgecolor='black')
plt.yscale('log') # 设置y轴为对数刻度
-
-
-
多个数据集的直方图
-
import matplotlib.pyplot as plt import numpy as np# 生成两组随机数据 data1 = np.random.randn(1000) data2 = np.random.randn(1000)# 绘制两个数据集的直方图 plt.hist(data1, bins=30, alpha=0.5, label='数据集1') plt.hist(data2, bins=30, alpha=0.5, label='数据集2')# 添加标题、标签和图例 plt.title("两个数据集的直方图") plt.xlabel("值") plt.ylabel("频率") plt.legend()# 显示图形 plt.show()
-
代码解析:
alpha=0.5
:设置条形的透明度,使两个直方图能够重叠显示。plt.legend()
:显示图例,帮助区分不同数据集。
-
-
-
饼图 (Pie Chart)
-
用圆形图表示各部分占整体的比例。
-
import matplotlib.pyplot as plt# 数据 labels = ['A', 'B', 'C', 'D'] sizes = [15, 30, 45, 10] # 每个部分的数值 colors = ['#ff9999','#66b3ff','#99ff99','#ffcc99'] # 每个部分的颜色 explode = (0.1, 0, 0, 0) # 使第一块稍微突出显示# 绘制饼图 plt.pie(sizes, labels=labels, colors=colors, explode=explode, autopct='%1.1f%%', startangle=140)# 添加标题 plt.title('简单的饼图')# 显示图形 plt.show()
-
代码解析:
labels
:指定每个扇区的标签(如A、B、C、D)。sizes
:指定每个扇区的数值(代表各部分占整体的比例)。colors
:为每个扇区指定不同的颜色。explode
:突出显示某些部分(例如,(0.1, 0, 0, 0)
表示将第一个部分突出显示)。autopct='%1.1f%%'
:显示每个扇区的百分比,保留1位小数。startangle=140
:设置饼图起始角度,默认是从0度开始。通过调整startangle
可以旋转饼图,使其更美观。
-
饼图的常用参数:
labels
:为每个扇区指定一个标签。sizes
:每个扇区的数值或比例。colors
:为每个扇区指定颜色。autopct
:显示扇区的百分比。startangle
:设置饼图的起始角度,默认为0,调整它可以改变饼图的起始显示方向。explode
:通过偏移某些扇区来突出显示,值越大,扇区偏移越远。
-
饼图的更多自定义:
-
调整扇区标签的字体:
-
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, textprops={'fontsize': 12})
-
-
设置阴影效果:
-
plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140, shadow=True)
-
-
设置饼图的圆形比例: 默认情况下,
plt.pie()
会绘制一个椭圆形的饼图,如果你希望它呈现圆形,可以设置axis
为equal
:-
plt.axis('equal') # 保证饼图是圆形的
-
-
-
展示多个饼图:
如果你有多个饼图数据,可以在同一张图中绘制多个饼图,使用
subplot()
进行布局。例如:-
fig, axs = plt.subplots(1, 2, figsize=(10, 5))# 第一个饼图 axs[0].pie(sizes, labels=labels, autopct='%1.1f%%', startangle=140) axs[0].set_title('饼图1')# 第二个饼图 axs[1].pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90) axs[1].set_title('饼图2')# 显示图形 plt.show()
-
-
-
面积图 (Area Plot)
-
类似于折线图,但下方区域被填充,适合展示趋势及组成。
-
import matplotlib.pyplot as plt# 数据 x = [1, 2, 3, 4, 5] y = [1, 4, 9, 16, 25]# 绘制面积图 plt.fill_between(x, y, color="skyblue", alpha=0.4)# 添加标题和标签 plt.title("简单的面积图") plt.xlabel("x") plt.ylabel("y")# 显示图形 plt.show()
-
代码解析:
plt.fill_between(x, y, color="skyblue", alpha=0.4)
:fill_between()
函数用来绘制面积图,x
和y
定义了数据点,color
设置填充颜色,alpha
控制填充的透明度。plt.title()
:设置图表的标题。plt.xlabel()
和plt.ylabel()
:设置x轴和y轴的标签。
-
堆叠面积图:多个系列
堆叠面积图不仅展示每个系列的数据,还可以看到每个部分如何累积在一起。适合展示多个部分对整体趋势的贡献。
-
import matplotlib.pyplot as plt# 数据 x = [1, 2, 3, 4, 5] y1 = [1, 2, 3, 4, 5] y2 = [1, 3, 5, 7, 9]# 绘制堆叠面积图 plt.stackplot(x, y1, y2, labels=["y1", "y2"], alpha=0.5)# 添加标题和标签 plt.title("堆叠面积图") plt.xlabel("x") plt.ylabel("y") plt.legend(loc="upper left")# 显示图形 plt.show()
-
代码解析:
plt.stackplot(x, y1, y2, labels=["y1", "y2"], alpha=0.5)
:stackplot()
函数用来绘制堆叠面积图,可以传入多个系列数据(如y1
和y2
),通过堆叠的方式显示它们的变化。labels
:为每个系列指定标签。alpha=0.5
:设置填充透明度。
-
面积图的常用参数:
color
:设置填充颜色。alpha
:设置透明度,范围为0到1,值越小,透明度越高。labels
:用于堆叠图时,为每个部分提供标签。linewidth
:设置线条的宽度。linestyle
:设置线条的样式。
-
-
-
箱型图 (Box Plot)
-
用于展示数据的分布情况,显示中位数、四分位数和异常值。
-
-
热图 (Heatmap)
-
使用颜色表示数据的强度,适合展示矩阵或二维数据。
-
-
雷达图 (Radar Chart)
-
显示多变量的关系,适合展示具有多个维度的数据。
-
-
阶梯图 (Step Plot)
-
线段之间为水平,适合展示步骤变化的数据。
-
-
堆积图 (Stacked Plot)
-
类似于面积图,但多个数据系列叠加在一起,展示部分与整体的关系。
-
-
双坐标轴图 (Dual Axis Plot)
-
使用两个 y 轴显示不同量纲的数据,适合比较不同数据源。
-
-
条形图 (Horizontal Bar Plot)
-
条形图的水平版,适合数据分类较多时显示。
-
-
矩形树图 (Tree Map)
-
用矩形区域表示层级数据,面积大小与数据值相关。
-
-
渐变图 (Gradient Plot)
-
展示颜色从一个色带到另一个色带的渐变,适用于表示数据的变化。
-
-
时间序列图 (Time Series Plot)
-
用于显示随时间变化的数据,通常用于金融、经济数据的可视化。
-
-
分布图 (Distribution Plot)
-
显示数据的概率分布,通常用于展示数据的密度。
-
3D 图表
-
3D 散点图 (3D Scatter Plot)
-
展示三维空间中的数据点,适合分析三维数据的分布。
-
-
3D 曲面图 (3D Surface Plot)
-
用于展示三维数据的表面,适合分析三维数据之间的关系。
-
-
3D 等高线图 (3D Contour Plot)
-
显示三维数据的等高线,适合分析高度、温度等变化情况。
-
-
3D 栅格图 (3D Wireframe Plot)
-
显示三维数据的网格线,适合展示函数图形。
-
-
3D 线图 (3D Line Plot)
-
类似于 2D 折线图,但增加了三维的效果,适合展示三维数据的变化。
-
-
3D 直方图 (3D Histogram)
-
类似于 2D 直方图,但用于展示三维数据的分布。
-
总结:
Matplotlib 支持多种类型的图表,适用于不同的场景和需求,包括折线图、散点图、条形图、饼图、直方图、箱型图等。你可以根据数据的特点选择合适的图表类型来展示数据。需要注意的是,Matplotlib 的功能不仅仅限于这些基本图表,你还可以自定义很多其他图形、样式和特效。