Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

附录:绘制多种图表类型

matplotlib是一个功能强大的绘图库,提供了多种绘图方式来满足不同的数据可视化需求。以下是一些常用的绘图方式:

绘图方式作用
折线图(Line plot)用于展示连续变量随着另一个变量的变化而变化的趋势。
散点图(Scatter plot)用于展示两个变量之间的关系,每个数据点由两个数值变量的数值对表示。
柱状图(Bar plot)用于展示离散变量的分布或不同类别之间的比较。
饼图(Pie chart)用于展示不同类别的占比或比例关系。
直方图(Histogram)用于展示连续变量的分布情况。
箱线图(Box plot)用于展示数据的分布情况、离群值和中位数等统计指标。
热力图(Heatmap)用于展示矩阵数据的热度分布,通常使用颜色来表示数值大小。
3D图(3D plot)用于展示三维数据的可视化,如三维散点图、三维曲面图等。
等高线图(Contour plot)用于展示二维数据的等高线分布,通常用于表示地形、气象等数据。
简单地图(Simple map)用于展示地理数据的简单地图,如散点地图、区域地图等。

除了上述常用的绘图方式,matplotlib还提供了许多其他类型的图表和绘图工具,如极坐标图、网络图、动画等,可以根据具体需求选择合适的绘图方式。

使用如下命令在jupyter绘图过程中显示无损图形:

from matplotlib_inline import backend_inline
backend_inline.set_matplotlib_formats('svg') 

在进行绘图前,我们先创建两组序列,分别为X和Y:

import numpy as np
X = np.arange(100)
Y = X * np.random.rand(100)   #生成100个0-1之间的随机数

1. 散点图

散点图(Scatter plot)是一种常用的数据可视化方式,用于展示两个变量之间的关系。在散点图中,每个数据点由两个数值变量的数值对表示,其中一个变量位于横轴,另一个变量位于纵轴。通过绘制数据点的位置,可以观察到两个变量之间的分布、趋势和相关性。

散点图可以帮助我们回答一些问题,例如:

  • 两个变量之间是否存在线性关系?

  • 变量之间的相关性是正向还是负向?

  • 是否存在异常值或离群点?

  • 是否存在聚类或分组的趋势?

在matplotlib中,可以使用scatter函数来绘制散点图:

import matplotlib.pyplot as plt
plt.figure(figsize=(6,2))  
plt.scatter(X, Y)               # 散点图的语句
plt.show()
Loading...

ax.scatter函数是matplotlib中用于绘制散点图的函数,它有很多可用的参数。以下是一些常用的参数:

  • x, y:表示散点图的横轴和纵轴数据,可以是数组、列表或标量。

  • s:表示散点的大小,可以是标量或数组。默认值为20。

  • c:表示散点的颜色,可以是颜色名称、颜色缩写、RGB元组或RGBA元组。默认值为None,表示使用默认颜色。

  • marker:表示散点的形状,可以是标记名称或标记代码。常见的标记有’o’(圆圈)、‘s’(正方形)、‘^’(三角形)等。默认值为’o’。

  • cmap:表示散点的颜色映射,可以是颜色映射对象或颜色映射名称。默认值为None。

  • alpha:表示散点的透明度,取值范围为0到1之间。默认值为1,表示完全不透明。

  • edgecolors:表示散点的边缘颜色,可以是颜色名称、颜色缩写、RGB元组或RGBA元组。默认值为’face’,表示使用与散点颜色相同的边缘颜色。

  • linewidths:表示散点的边缘线宽度,可以是标量或数组。默认值为None,表示使用默认线宽。

  • label:表示散点的标签,用于图例显示。

这只是一部分常用的参数,您可以根据需要查阅matplotlib官方文档以获取更详细的参数说明。

2. 折线图

折线图(Line plot)是一种常用的数据可视化方式,用于展示连续变量随着另一个变量的变化而变化的趋势。在折线图中,横轴通常表示自变量,纵轴表示因变量,通过连接数据点的线段来展示数据的变化趋势。

折线图常用于以下情况:

  • 观察随时间变化的趋势,如股票价格、气温变化等。

  • 比较不同组别或条件下的变化趋势,如不同产品的销售量、不同地区的人口增长等。

  • 分析变量之间的关系,如变量X对变量Y的影响程度。

在matplotlib中,可以使用plot函数来绘制折线图:

plt.figure(figsize=(6,2))   
plt.plot(X, Y, '-o')         # 绘制折线图
plt.show()                
Loading...

ax.plot函数是matplotlib中用于绘制折线图的函数,它有很多可用的参数。以下是一些常用的参数:

  • x, y:表示折线图的横轴和纵轴数据,可以是数组、列表或标量。

  • linestyle:表示折线的样式,可以是线条样式字符串(如’-‘、’--‘、’:‘、’-.'),也可以是Line2D属性(如Line2D.linestyle)。

  • linewidth:表示折线的宽度,可以是标量。默认值为1。

  • color:表示折线的颜色,可以是颜色名称、颜色缩写、RGB元组或RGBA元组。默认值为None,表示使用默认颜色。

  • marker:表示折线上数据点的标记,可以是标记名称或标记代码。常见的标记有’o’(圆圈)、‘s’(正方形)、‘^’(三角形)等。默认值为None,表示不显示标记。

  • markersize:表示折线上数据点标记的大小,可以是标量。默认值为None,表示使用默认大小。

  • label:表示折线的标签,用于图例显示。

  • alpha:表示折线的透明度,取值范围为0到1之间。默认值为1,表示完全不透明。

  • 其他参数:还有一些其他参数,如zorder(绘图顺序)、solid_capstyle(线条端点样式)、dash_capstyle(虚线段端点样式)等。

这只是一部分常用的参数,您可以根据需要查阅matplotlib官方文档以获取更详细的参数说明。

练习: 绘制收益率的折线图

IBM的股票代码为IBM,标普指数的代码为SP,可口可乐的股票代码是KO,三者的月度收益率序列存储在’datasets/ibmspko.csv’文件中。

  1. 请使用pandas读取收益率序列

  2. 使用pd.DataFrame.cumsum()计算可口可乐的收益率序列的累积收益率序列

  3. 绘制可口可乐的收益率序列的累积收益率折线图

  4. 绘制一个图形,包含3个子图,每个子图中分别绘制3个(IBM、SP,KO)的累积收益折线图,分别使用3种marker(“^”,“o”, “x”),显示图例legend








3. 柱状图

柱状图(Bar plot)是一种常用的数据可视化方式,用于展示离散变量的分布或不同类别之间的比较。在柱状图中,每个类别是一个矩形柱,柱的高度表示该类别的频数、数量或其他统计指标。

柱状图常用于以下情况:

  • 比较不同类别的数量或频数,如不同产品的销售量、不同地区的人口数量等。

  • 展示离散变量的分布情况,如考试成绩的分布、用户评分的分布等。

  • 分析类别变量与连续变量之间的关系,如不同性别的平均收入、不同年龄段的平均消费等。

在matplotlib中,可以使用bar函数来绘制柱状图。该函数接受一个数组或列表作为参数,表示每个类别的高度或值。可以通过设置参数来调整柱的宽度、颜色、边框等属性,以及添加标题、标签等元素来增强图表的可读性和美观性。

plt.figure(figsize=(6,2))
plt.bar(X, Y)                 # 柱状图的语句
plt.show()
Loading...

ax.bar()函数是matplotlib中用于绘制柱状图的函数,它有以下常用参数:

  • x:柱状图的x坐标,可以是一个一维数组或列表。

  • height:柱状图的高度,可以是一个一维数组或列表。

  • width:柱状图的宽度,默认为0.8。

  • bottom:柱状图的底部位置,默认为None。

  • align:柱状图的对齐方式,可以是’center’、‘edge’或一个浮点数,默认为’center’。

  • color:柱状图的颜色,可以是一个颜色字符串、颜色列表或一个数组,默认为None。

  • edgecolor:柱状图的边框颜色,默认为None。

  • linewidth:柱状图的边框线宽度,默认为None。

  • tick_label:柱状图的刻度标签,默认为None。

  • log:是否使用对数刻度,默认为False。

  • orientation:柱状图的方向,可以是’vertical’或’horizontal’,默认为’vertical’。

  • label:柱状图的标签,默认为None。

  • alpha:柱状图的透明度,取值范围为0到1,默认为1。

  • align:柱状图的对齐方式,默认为’center’。

  • yerr:柱状图的y方向误差线,默认为None。

  • capsize:误差线的帽子大小,默认为None。

这些参数可以根据需要进行调整,以满足绘制柱状图的需求。

4. 频数图或直方图

在matplotlib中,频数图(Histogram)也被称为直方图。它是一种用于展示数据分布的图表类型。直方图将数据分成一系列的区间(也称为“箱子”或“柱子”),并统计落入每个区间的数据数量,然后将这些统计结果以柱状图的形式呈现出来。

直方图的x轴表示数据的取值范围,y轴表示该范围内数据的频数或频率。每个柱子的宽度表示区间的大小,柱子的高度表示该区间内数据的数量或频率。通过直方图,我们可以直观地了解数据的分布情况,包括数据的集中程度、偏态、峰度等。

在matplotlib中,可以使用plt.hist()函数来绘制直方图:

plt.figure(figsize=(6,3))      
plt.hist(Y, bins=20)                
plt.show()
Loading...

ax.hist()函数是matplotlib中用于绘制直方图的函数,它有以下常用参数:

  • x:直方图的数据,可以是一个一维数组或列表。

  • bins:直方图的箱体数量,可以是一个整数、一个数组或一个字符串,默认为10。

  • range:直方图的数据范围,默认为None。

  • density:是否将直方图归一化为概率密度,默认为False。

  • weights:直方图的权重,默认为None。

  • cumulative:是否绘制累积直方图,默认为False。

  • histtype:直方图的类型,可以是’bar’、‘barstacked’、‘step’、‘stepfilled’,默认为’bar’。

  • align:直方图的对齐方式,可以是’left’、‘mid’、‘right’,默认为’mid’。

  • orientation:直方图的方向,可以是’vertical’或’horizontal’,默认为’vertical’。

  • rwidth:直方图的宽度相对于箱体宽度的比例,默认为0.8。

  • color:直方图的颜色,默认为None。

  • edgecolor:直方图的边框颜色,默认为None。

  • linewidth:直方图的边框线宽度,默认为None。

  • label:直方图的标签,默认为None。

  • alpha:直方图的透明度,取值范围为0到1,默认为1。

这些参数可以根据需要进行调整,以满足绘制直方图的需求。

练习: 绘制收益率的频率分布图

IBM的股票代码为IBM,标普指数的代码为SP,可口可乐的股票代码是KO,三者的月度收益率序列存储在’datasets/ibmspko.csv’文件中。

  1. 请使用pandas读取收益率序列

  2. 绘制可口可乐的收益率序列的频率分布图,bins参数为50











5. 箱形图

在matplotlib中,箱形图(Box plot)是一种用于展示数据分布和离群值的图表类型。它通过五个统计量(最小值、第一四分位数、中位数、第三四分位数、最大值)来描述数据的分布情况,并使用箱体和须线的形式呈现出来。

箱形图的主要组成部分包括:

  1. 箱体(Box):表示数据的四分位数范围,箱体的上边界为第三四分位数(Q3),下边界为第一四分位数(Q1),箱体内部为中位数(Median)。

  2. 须线(Whiskers):表示数据的整体范围,通常是从箱体边界延伸出来的线段。须线的长度可以根据数据的分布情况进行调整。

  3. 离群值(Outliers):超出须线范围的数据点,被认为是异常值或离群值。

箱形图可以帮助我们快速了解数据的中心趋势、离散程度和异常值情况。在matplotlib中,可以使用plt.boxplot()函数来绘制箱形图:

plt.figure(figsize=(6,3))
plt.boxplot(Y)
plt.show()
Loading...

ax.boxplot()函数是matplotlib中用于绘制箱线图的函数,它有以下常用参数:

  • x:用于绘制箱线图的数据,可以是一个一维数组或列表。

  • notch:是否绘制缺口箱线图,默认为False。

  • sym:指定异常值的标记符号,默认为’+'。

  • vert:指定箱线图的方向,True表示垂直方向,False表示水平方向,默认为True。

  • patch_artist:是否使用填充颜色,默认为False。

  • meanline:是否绘制均值线,默认为False。

  • showmeans:是否显示均值,默认为False。

  • showcaps:是否显示箱线图的边缘线,默认为True。

  • showbox:是否显示箱体,默认为True。

  • showfliers:是否显示异常值,默认为True。

  • whis:指定箱线图的须的长度,默认为1.5。

  • widths:指定箱体的宽度,可以是一个标量或一个数组,默认为0.5。

  • labels:指定每个箱线图的标签,默认为None。

  • positions:指定每个箱线图的位置,默认为None。

  • meanprops:用于设置均值线的属性,如颜色、线型等,默认为None。

  • medianprops:用于设置中位数线的属性,默认为None。

  • boxprops:用于设置箱体的属性,默认为None。

  • whiskerprops:用于设置须的属性,默认为None。

  • capprops:用于设置边缘线的属性,默认为None。

这些参数可以根据需要进行调整,以满足绘制箱线图的需求。

6. 饼状图

在饼状图(Pie chart)是一种用于展示数据占比的图表类型。它通过将数据按照比例划分成扇形区域,并使用扇形的面积来表示数据的相对大小。

饼状图的主要特点包括:

  1. 扇形区域:每个数据类别对应一个扇形区域,扇形的面积表示该类别数据的占比。

  2. 标签:可以在每个扇形区域内显示数据类别的标签,用于标识不同类别。

  3. 饼图的总体形状:饼状图通常呈现为一个圆形,但也可以通过调整参数来改变形状,如椭圆形、半圆形等。

饼状图适用于展示数据的相对比例和占比关系,特别适合用于展示分类数据的分布情况。在matplotlib中,可以使用plt.pie()函数来绘制饼状图:

X = np.random.uniform(0, 1, 4)

plt.figure(figsize=(6,4))
labels = [ 'label_A', 'label_B', 'label_C', 'label_D']
autopct='%1.1f%%'
explode = (0.1, 0, 0, 0)
plt.pie(X, labels=labels,
          autopct=autopct,
          explode=explode,
          shadow=True,
          startangle=90)                    # 饼状图的语句
plt.show()
Loading...

ax.pie()函数是matplotlib中用于绘制饼状图的函数,它有以下常用参数:

  • x:用于绘制饼状图的数据,可以是一个一维数组或列表。

  • explode:控制每个扇形区域的偏移量,用于突出显示某些部分,默认为None。

  • labels:每个扇形区域的标签,可以是一个字符串列表,默认为None。

  • colors:每个扇形区域的颜色,可以是一个颜色列表,默认为None。

  • autopct:控制扇形区域内显示的百分比格式,默认为None。

  • shadow:是否显示阴影效果,默认为False。

  • startangle:起始角度,以逆时针方向测量,默认为0度。

  • radius:饼状图的半径,默认为1。

  • counterclock:是否按逆时针方向绘制饼状图,默认为True。

这些参数可以根据需要进行调整,以满足绘制饼状图的需求。