Matplotlib 是 Python 的绘图库,可以用来绘制各种静态,动态,交互式图表,并且提供多样化的输出格式。并且可根据Numpy的ndarray数组绘制2D(3D)图形。
Matplotlib安装pip install matplotlib pip install matplotlib -i https://pypi.douban.com/simple/
获取当前版本
import matplotlib print(matplotlib.__version__)Pyplot
Pyplot 是 Matplotlib 的子库,是常用的绘图模块,能很方便让用户绘制 2D 图表。
Pyplot 加载
# 加载方式1 import matplotlib.pyplot as plt # 加载方式2 from matplotlib import pyplot as plt
绘制第一个图形
import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 xpoints = np.array([0, 6]) ypoints = np.array([0, 100]) # 通过两个坐标 (0,0) 到 (6,100) 来绘制一条线,并进行可视化展示 plt.plot(xpoints, ypoints) plt.show()折线图
Matplotlib采用plot()函数绘制
plot([x], y, [fmt], *, data=None, **kwargs) plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs)
| 参数 | 说明 |
|---|---|
| x | x轴对应的数据,若省略使用默认值 0,1,…,N |
| y | y轴对应的数据 |
| fmt | 折线样式设置 ‘[marker][color][line]’ |
| alpha | 折线透明度,范围0~1 |
根据y轴数据绘制折线图
import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 y_values = np.array([5, 6, 8, 1, 3, 5, 8, 0, 3, 3, 8]) # 根据y轴数据绘制折线图,当x轴数据省略时,x轴数据采用默认值 0,1,...,N plt.plot(y_values) plt.show()
根据x轴/y轴数据绘制折线图
import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 x_values = np.arange(10) y_values = np.random.randint(2, 20, size=10) # 通过两个坐标轴数据来绘制一条折线,此时x轴和y轴数据个数要保持一致 plt.plot(x_values, y_values) plt.show()
复合折线
import matplotlib.pyplot as plt import numpy as np # 两条曲线共用x轴 x = np.arange(-10, 11) y1 = x ** 2 y2 = x # 若一幅图中包含多条曲线,则一次列出每条曲线的x轴数据和y轴数据 plt.plot(x, y1, x, y2) plt.show()颜色样式
Matplotlib折线颜色通过color属性指定,颜色取值可以是颜色英文单词、十六进制颜色、也可以是颜色字符。
| 颜色字符 | 描述 |
|---|---|
| ‘b’ | 蓝色 |
| ‘r’ | 红色 |
| ‘g’ | 绿色 |
| ‘y’ | 黄色 |
| ‘k’ | 黑色 |
| ‘w’ | 白色 |
| ‘m’ | 洋红色 |
| ‘c’ | 青绿色 |
| ’#rrggbb’ | 十六进制颜色字符串 |
| red | 颜色英文单词 |
import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 x_values = np.arange(10) y_values = np.random.randint(2, 20, size=10) # 通过color属性指定折线颜色,以下三种方法任选其一 plt.plot(x_values, y_values, color='g') # plt.plot(x_values, y_values, color='green') # plt.plot(x_values, y_values, color='#00ff00') plt.show()
折线样式color属性的简写形式为c,color='g’与c='g’是等价的,开发中推荐使用简写形式
| 属性 | 描述 |
|---|---|
| linestyle | ls | 折线类型 |
| linewidth | lw | 折线宽度,float数值 |
折线类型
| 线型字符 | 描述 |
|---|---|
| ‘‐’ | 实线 |
| ‘‐‐’ | 破折线 |
| ‘‐.’ | 点划线 |
| ‘:’ | 虚线 |
import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 x_values = np.arange(10) y_values = np.random.randint(2, 20, size=10) # linestyle属性指定了折线的表现形式,linewidth指定了折线的宽度。以下两种写法任选其一 plt.plot(x_values, y_values, ls='--', lw=3) # plt.plot(x_values, y_values, linestyle='--', linewidth=3) plt.show()标记样式
Matplotlib通过marker以及附属属性对折线标记的类型、大小、颜色进行设置。
| 属性 | 描述 |
|---|---|
| marker | 标记类型 |
| markersize | ms | 标记的大小 |
| markerfacecolor | mfc | 标记内部的颜色 |
| markeredgecolor | mec | 标记边框的颜色 |
| markeredgewidth | mew | 标记边框的宽度 |
标记类型
| 样式字符 | 描述 |
|---|---|
| ‘.’ | 点标记 |
| ‘,’ | 像素标记 |
| ‘o’ | 圆形标记 |
| ‘v’ | 三角向下标记 |
| ‘^’ | 三角向上标记 |
| ‘<’ | 三角向左标记 |
| ‘>’ | 三角向右标记 |
| ‘s’ | 方形标记 |
| ‘p’ | 五边形标记 |
| ‘*’ | 星号标记 |
| ‘h’ | 六边形标记 |
| ‘H’ | 加粗六边形标记 |
| ‘+’ | 加号标记 |
| ‘P’ | 加号标记(填充) |
| ‘x’ | 乘号 x |
| ‘X’ | 乘号 x(填充) |
| ‘D’ | 加粗菱形标记 |
| ‘d’ | 菱形标记 |
| ‘|’ | |标记 |
| ‘_’ | 下划线标记 |
| ‘1’ | 下三叉 |
| ‘2’ | 上三叉 |
| ‘3’ | 左三叉 |
| ‘4’ | 右三叉 |
| ‘8’ | 八角形 |
import matplotlib.pyplot as plt import numpy as np # 通过numpy定义绘图所需要的数据 x_values = np.array([1, 2, 3]) y_values = np.array([1, 2, 3]) # marker属性指定标记类型 plt.plot(x_values, y_values, marker="s") plt.show()
标记颜色、大小设置
import matplotlib.pyplot as plt
import numpy as np
# 定义绘图所需要的坐标点
x_values = np.array([1, 2, 3])
y_values = np.array([1, 2, 3])
'''
markersize:设置标记大小, 通常简写为ms
markerfacecolor:设置标记内部颜色, 通常简写为mfc
markeredgecolor:设置标记边线颜色, 通常简写为mec
markeredgewidth:设置标记边线宽度, 通常简写为mew
'''
# 以下两种写法等价,开发中推荐使用简写形式
plt.plot(x_values, y_values, marker="o",
ms=20,
mfc='red',
mec='green',
mew=4
)
# plt.plot(x_values, y_values, marker="o",
# markersize=20,
# markerfacecolor='red',
# markeredgecolor='green',
# markeredgewidth=4
# )
plt.show()
样式简写
# 折线的颜色、折线样式、标记样式可以连写 [marker][line][color],并且三者的顺序可以随意调换 import matplotlib.pyplot as plt import numpy as np # 定义绘图所需要的坐标点 xpoints = np.array([0, 6]) ypoints = np.array([0, 100]) # 通过两个坐标 (0,0) 到 (6,100) 来绘制一条线,并进行可视化展示 plt.plot(xpoints, ypoints, 'o-g') plt.show()标签样式
| 函数 | 描述 |
|---|---|
| title() | 设置标题 |
| xlabel() | 设置x轴标题 |
| ylabel() | 设置y轴标题 |
| loc() | 设置标题和坐标轴标题位置 |
import matplotlib.pyplot as plt
import numpy as np
# 准备数据
x = np.arange(-10, 11)
y = x ** 2
# title()函数用于设置标题
plt.title("y = x ^ 2",fontsize=12)
# xlabel()与ylabel()用于设置轴标题
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.show()
中文乱码解决
Matplotlib默认不支持中文,可以通过下列语句查询系统支持的字体,选择并设置字体达到解决中文乱码问题。
import matplotlib from matplotlib import pyplot as plt # 打印Matplotlib自带的字体 font_list = [f.name for f in matplotlib.font_manager.fontManager.ttflist] print(font_list)
设置字体
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10, 11)
y = x ** 2
# 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示
plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题
plt.title("y=x^2图形可视化")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.plot(x, y)
plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PgyW90jv-1654067119123)(matplotlib.assets/image-20220514235410579.png)]
文本位置
'''
title:loc参数设置标题显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
xlabel():loc参数来设置x轴显示的位置,可以设置为: 'left', 'right', 和 'center', 默认值为 'center'。
ylabel():loc参数来设置y轴显示的位置,可以设置为: 'bottom', 'top', 和 'center', 默认值为 'center'。
'''
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-10, 11)
y = x ** 2
# 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示
plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题
# loc()设置了文本的对齐方式
plt.title("y=x^2图形可视化", loc='center')
plt.xlabel("x - label", loc='right')
plt.ylabel("y - label", loc='top')
plt.plot(x, y)
plt.show()
网格线
使用 pyplot 中的 grid() 方法来设置图表中的网格线。
plt.grid(b=None, which='major', axis='both',**kwargs)
| 属性 | 描述 |
|---|---|
| b | 是否显示网格线(True|False),默认True |
| which | 网格线刻度(major|minor|both),默认both |
| axis | 设置网格线方向(x|y|both),默认both |
| color | 网格线颜色 |
| linestyle | ls | 网格线样式(‘‐’, ‘–’, ‘-.’, ‘:’) |
| linewidth | lw | 网格线宽度(数值) |
基本网格设置
import numpy as np
import matplotlib.pyplot as plt
# 准备数据
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
# 设置标题与坐标轴文本
plt.title("grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
plt.grid() # 设置网格
plt.plot(x, y)
plt.show()
网格线综合实例
import numpy as np
import matplotlib.pyplot as plt
# 准备数据
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
# 设置标题与坐标轴文本
plt.title("grid() Test")
plt.xlabel("x - label")
plt.ylabel("y - label")
# 设置网格
plt.grid(color='r', linestyle='--', linewidth=0.5)
plt.plot(x, y)
plt.show()
刻度与范围
设置坐标轴数值范围
import matplotlib.pyplot as plt import numpy as np # 两条曲线共用x轴 x = np.arange(-10, 11) y1 = x ** 2 y2 = x # 若一幅图中包含多条曲线,则一次列出每条曲线的x轴数据和y轴数据 plt.plot(x, y1, x, y2) plt.axis(xmin=0, xmax=10, ymin=0, ymax=80) # 设置坐标轴数值范围(方式1) # plt.axis([0, 10, 0, 80]) # 设置坐标轴数值范围(方式2) # 设置坐标轴数值范围(方式3) # plt.xlim(xmin=0.0,xmax=10) # plt.ylim(ymin=0, ymax=80) plt.show()
设置范围的语句要在plot()语句之后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DRVX0ZKB-1654067119130)(matplotlib.assets/image-20220515160906219.png)]
刻度设置
刻度设置用于设置坐标轴刻度标记显示的范围、密度、颜色等
xticks(ticks=None, labels=None, **kwargs) xticks(ticks=None, labels=None, **kwargs)
| 属性 | 描述 |
|---|---|
| ticks | 指定标注位置 |
| labels | 指定标注内容 |
| rotation | 刻度旋转角度 |
| color | 刻度颜色 |
刻度基本操作
import matplotlib.pyplot as plt # 准备数据 x = range(1, 13) y = [1, 3, 9, 12, 15, 23, 34, 31, 23, 28, 27, 30] plt.xticks(x) # 设置x轴标记(图1) # 以下两种写法等价 # plt.xticks(range(1,len(x),2)) # 按间隔设置x轴标记(图2) # plt.xticks([x[i] for i in range(0,len(x),2)]) # 按间隔设置x轴标记(图2) plt.plot(x, y, 'o-b') plt.show()
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LJVWpVCg-1654067119132)(matplotlib.assets/image-20220515174406527.png)]
自定义刻度
from matplotlib import pyplot as plt
x = range(1, 13)
y = [1, 3, 9, 12, 15, 23, 34, 31, 23, 28, 27, 30]
# 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示
plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题
plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题
x_labels = [r"{}月".format(val) for val in x]
plt.xticks(x, labels=x_labels, rotation=45) # rotation表示旋转的角度
plt.plot(x, y, 'o-b')
plt.show()
图例设置
import random
from matplotlib import pyplot as plt
x = range(1, 13)
y1 = [1, 3, 9, 12, 15, 23, 34, 31, 23, 28, 27, 30]
y2 = [3, 2, 12, 21, 23, 4, 32, 30, 28, 18, 21, 31]
# 以下两句解决中文乱码问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.xticks(x, ['{}月'.format(i) for i in x])
plt.ylabel('销售额(万)') # y轴标题
plt.title('每月销售额') # 图片标题
# 绘制网格 (alpha设置透明度,也可以设置网格线的样式)
plt.grid(alpha=0.4)
# label属性指定图例
plt.plot(x, y1, color='red', label='小明')
plt.plot(x, y2, color='blue', label='小方')
# 添加图例
# 设置位置loc: upper left、lower left、center left、upper center
plt.legend(loc='upper left')
plt.show()
图例设置语句legend()要在绘图语句plot()之后
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ap0ZDLJs-1654067119134)(matplotlib.assets/image-20220525105218626.png)]
绘制子图Matplotlib使用 pyplot 中的 subplot() 方法来绘制多个子图。
'''
subplot(nrows, ncols, index, **kwargs)
subplot把绘图区域分为nrows行ncols列,index确定子图的序号进行绘图
'''
import matplotlib.pyplot as plt
import numpy as np
# plot 1:
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
plt.subplot(1, 2, 1)
plt.plot(xpoints, ypoints, 'o-g')
plt.title("plot 1")
# plot 2:
x = np.array([1, 2, 3, 4])
y = np.array([1, 4, 9, 16])
plt.subplot(1, 2, 2)
plt.plot(x, y, 'o--r')
# annotate()用于在指定位置标记文本
plt.annotate('4', (1.8, 4))
plt.title("plot 2")
plt.suptitle("subplot Test")
plt.show()
保存图片
plt.savefig(img_path)
import matplotlib.pyplot as plt
import numpy as np
# 定义绘图所需要的坐标点
xpoints = np.array([0, 6])
ypoints = np.array([0, 100])
# 通过两个坐标 (0,0) 到 (6,100) 来绘制一条线,并进行可视化展示
plt.plot(xpoints, ypoints)
plt.savefig("tar.jpg") # 保存图片
plt.show()
savefig()操作一定要在show()之前执行,否则保存的将是空图片
设置图像尺寸
# plt.rcParams['figure.figsize'] = (8.0,4.0) plt.rcParams['figure.dpi'] = 200 # 默认72柱状图
Matplotlib采用pyplot 中的 bar() 方法来绘制柱形图
bar(x, height, width=0.8, bottom=None, *, align='center', data=None, **kwargs)
| 参数 | 描述 |
|---|---|
| x | 浮点型数组,柱形图的 x 轴数据 |
| height | 浮点型数组,柱形图的高度 |
| width | 浮点型数组,柱形图的宽度 |
| bottom | 浮点型数组,底座的 y 坐标,默认 0 |
| align | 柱形图与 x 坐标的对齐方式 |
基础柱状图
import matplotlib.pyplot as plt import numpy as np x = np.array(["英语", "数学", "政治", "语文"]) y = np.array([80, 76, 85, 90]) # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # 柱状图1 plt.subplot(1, 2, 1) plt.bar(x, y) # 柱状图2 plt.subplot(1, 2, 2) plt.barh(x, y, color='green') # color属性指定柱状图颜色 plt.show()
不同颜色柱状图
import matplotlib.pyplot as plt import numpy as np x = np.array(["英语", "数学", "政治", "语文"]) y = np.array([80, 76, 85, 90]) # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # 指定颜色 colors = ['red', 'blue', '#00ff00', 'lightblue'] plt.bar(x, y, color=colors) plt.show()
宽度控制
import matplotlib.pyplot as plt import numpy as np x = np.array(["英语", "数学", "政治", "语文"]) y = np.array([80, 76, 85, 90]) # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # 柱状图1(统一控制柱子的宽度) plt.subplot(1, 2, 1) plt.bar(x, y, width=0.5) # 柱状图2(通过数组控制每个柱子的宽度) plt.subplot(1, 2, 2) widths = [0.8, 0.7, 0.6, 0.5] plt.bar(x, y, color='green', width=widths) # color属性指定柱状图颜色 plt.show()
对齐方式控制
''' 柱形图与x坐标的对齐方式通过align属性设置,取值为'center'(默认值) 或 'edge' 'center'中心对齐,'edge'左边缘对齐 右边缘对齐可通过传递负数的宽度值及align='edge'实现 ''' import matplotlib.pyplot as plt import numpy as np x = np.array(["英语", "数学", "政治", "语文"]) y = np.array([80, 76, 85, 90]) # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # 柱状图1() plt.subplot(1, 2, 1) plt.bar(x, y, align="edge") # 柱状图2 plt.subplot(1, 2, 2) plt.bar(x, y, color='green', align="edge", width=-0.8) # color属性指定柱状图颜色 plt.show()
坐标轴基线
import matplotlib.pyplot as plt import numpy as np x = np.array(["英语", "数学", "政治", "语文"]) y = np.array([80, 76, 85, 90]) # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # 柱状图1 plt.subplot(1, 2, 1) plt.bar(x, y, bottom=0) # 柱状图2 plt.subplot(1, 2, 2) plt.bar(x, y, color='green', bottom=10) # color属性指定柱状图颜色 plt.show()饼状图
pie(x, explode=None, labels=None, colors=None, autopct=None,pctdistance=0.6, shadow=False, labeldistance=1.1,startangle=0, radius=1, counterclock=True, wedgeprops=None,textprops=None, center=(0, 0), frame=False,rotatelabels=False, *, normalize=True, data=None)
| 属性 | 描述 |
|---|---|
| x | 浮点型数组,表示每个扇形的面积 |
| explode | 数组,表示各个扇形之间的间隔,默认值为0 |
| labels | 列表,各个扇形的标签,默认值为 None |
| colors | 数组,表示各个扇形的颜色,默认值为 None |
| autopct | 设置饼图内各个扇形百分比显示格式,%d%%整数百分比,%0.1f一位小数,%0.1f%%一位小数百分比,%0.2f%%两位小数百分比 |
| labeldistance | 标签标记的绘制位置,相对于半径的比例,默认值为 1.1,如 <1则绘制在饼图内侧 |
| pctdistance | 类似于 labeldistance,指定 autopct 的位置刻度,默认值为 0.6 |
| shadow | 设置饼图的阴影(True | False),默认为False |
| radius | 设置饼图的半径(默认为 1) |
| startangle | 起始绘制饼图的角度,默认为从 x 轴正方向逆时针画起,如设定 =90 则从 y 轴正方向画起 |
| counterclock | 布尔值,设置指针方向,默认为 True,即逆时针,False 为顺时针 |
| wedgeprops | 字典类型,默认值 None。参数字典传递给 wedge 对象用来画一个饼图。例如:wedgeprops={‘linewidth’:5} 设置 wedge 线宽为5 |
| textprops | 字典类型,默认值为:None。传递给 text 对象的字典参数,用于设置标签(labels)和比例文字的格式 |
| center | 浮点类型的列表,默认值:(0,0)。用于设置图标中心位置 |
| frame | 绘制带有表的轴框架(True | False),默认为False |
| rotatelabels | 值为True则旋转每个 label 到指定的角度,默认值为False |
基本饼状图
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15]) # 数据
# 饼状图1
plt.subplot(1, 2, 1)
plt.pie(y)
# 饼状图2
plt.subplot(1, 2, 2)
plt.title("Pie Test") # 设置标题
labels = ['A', 'B', 'C', 'D'] # 设置饼图标签
colors = ["#d5695d", "#5d8ca8", "#65a479", "#a564c9"] # 设置饼图颜色
plt.pie(y, labels=labels, colors=colors)
plt.show()
百分比显示
import matplotlib.pyplot as plt
import numpy as np
y = np.array([35, 25, 25, 15]) # 数据
plt.title("Pie Test") # 设置标题
labels = ['A', 'B', 'C', 'D'] # 设置饼图标签
colors = ["#d5695d", "#5d8ca8", "#65a479", "#a564c9"] # 设置饼图颜色
explode = (0, 0.2, 0, 0) # 第二部分突出显示,值越大,距离中心越远
# autopct # 格式化输出百分比
plt.pie(y, labels=labels, colors=colors, explode=explode, autopct='%.2f%%')
plt.show()
散点图
scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
| 属性 | 描述 |
|---|---|
| x,y | 长度相同的数组,散点图的数据点 |
| s | 点的大小,默认 20,也可以是个数组,数组每个参数为对应点的大小 |
| c | 点的颜色,默认蓝色 ‘b’,也可以是个 RGB 或 RGBA 二维行数组 |
| marker | 点的样式,默认小圆圈 ‘o’ |
| alpha | 透明度设置,0-1 之间,默认 None,即不透明 |
| linewidths | 标记点的长度。 |
| edgecolors | 颜色或颜色序列,默认为 ‘face’,可选值有 ‘face’, ‘none’ |
基本散点图
import matplotlib.pyplot as plt import numpy as np x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = np.array([1, 4, 9, 16, 7, 11, 23, 18]) plt.scatter(x, y) plt.show()
设置散点图标大小和颜色
import matplotlib.pyplot as plt import numpy as np # 准备数据 x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) y = np.array([1, 4, 9, 16, 7, 11, 23, 18]) # 设置散点图标大小 sizes = np.array([20, 50, 100, 200, 500, 1000, 60, 90]) # 设置散点图标颜色 colors = np.array(["red", "green", "black", "orange", "purple", "beige", "cyan", "magenta"]) plt.scatter(x, y, s=sizes, c=colors) plt.show()
绘制多组散点图
import matplotlib.pyplot as plt import numpy as np # 第一组散点图 x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6]) y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86]) plt.scatter(x, y, color='hotpink') # 第二组散点图 x = np.array([2, 2, 8, 1, 15, 8, 12, 9, 7, 3, 11, 4, 7, 14, 12]) y = np.array([100, 105, 84, 105, 90, 99, 90, 95, 94, 100, 79, 112, 91, 80, 85]) plt.scatter(x, y, color='#88c999', alpha=0.3) # alpha用于设置透明度 plt.show()
颜色条
import matplotlib.pyplot as plt import numpy as np # 准备数据 x = np.array([5, 7, 8, 7, 2, 17, 2, 9, 4, 11, 12, 9, 6]) y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86]) colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100]) # 设置颜色范围 plt.scatter(x, y, c=colors, cmap='winter_r') # 绘制散点图 plt.colorbar() # 显示颜色条 plt.show()
cmap取值列表
| 色条名称(正序) | 色条名称(逆序) |
|---|---|
| Accent | Accent_r |
| Blues | Blues_r |
| BrBG | BrBG_r |
| BuGn | BuGn_r |
| BuPu | BuPu_r |
| CMRmap | CMRmap_r |
| Dark2 | Dark2_r |
| GnBu | GnBu_r |
| Greens | Greens_r |
| Greys | Greys_r |
| OrRd | OrRd_r |
| Oranges | Oranges_r |
| PRGn | PRGn_r |
| Paired | Paired_r |
| Pastel1 | Pastel1_r |
| Pastel2 | Pastel2_r |
| PiYG | PiYG_r |
| PuBu | PuBu_r |
| PuBuGn | PuBuGn_r |
| PuOr | PuOr_r |
| PuRd | PuRd_r |
| Purples | Purples_r |
| RdBu | RdBu_r |
| RdGy | RdGy_r |
| RdPu | RdPu_r |
| RdYlBu | RdYlBu_r |
| RdYlGn | RdYlGn_r |
| Reds | Reds_r |
| Set1 | Set1_r |
| Set2 | Set2_r |
| Set3 | Set3_r |
| Spectral | Spectral_r |
| Wistia | Wistia_r |
| YlGn | YlGn_r |
| YlGnBu | YlGnBu_r |
| YlOrBr | YlOrBr_r |
| YlOrRd | YlOrRd_r |
| afmhot | afmhot_r |
| autumn | autumn_r |
| binary | binary_r |
| bone | bone_r |
| brg | brg_r |
| bwr | bwr_r |
| cividis | cividis_r |
| cool | cool_r |
| coolwarm | coolwarm_r |
| copper | copper_r |
| cubehelix | cubehelix_r |
| flag | flag_r |
| gist_earth | gist_earth_r |
| gist_gray | gist_gray_r |
| gist_heat | gist_heat_r |
| gist_ncar | gist_ncar_r |
| gist_rainbow | gist_rainbow_r |
| gist_stern | gist_stern_r |
| gist_yarg | gist_yarg_r |
| gnuplot | gnuplot_r |
| gnuplot2 | gnuplot2_r |
| gray | gray_r |
| hot | hot_r |
| hsv | hsv_r |
| inferno | inferno_r |
| jet | jet_r |
| magma | magma_r |
| nipy_spectral | nipy_spectral_r |
| ocean | ocean_r |
| pink | pink_r |
| plasma | plasma_r |
| prism | prism_r |
| rainbow | rainbow_r |
| seismic | seismic_r |
| spring | spring_r |
| summer | summer_r |
| tab10 | tab10_r |
| tab20 | tab20_r |
| tab20b | tab20b_r |
| tab20c | tab20c_r |
| terrain | terrain_r |
| twilight | twilight_r |
| twilight_shifted | twilight_shifted_r |
| viridis | viridis_r |
| winter | winter_r |
箱线图是一种用作显示一组数据分散情况资料的统计图,主要作用是发现数据内部整体的分布分散情况,包括最大值、最小值、中位数、及上下四分位数、异常值等。
https://blog.csdn.net/ningyanggege/article/details/82625947?utm_term=%E7%AE%B1%E7%BA%BF%E5%9B%BE&utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2allsobaiduweb~default-5-82625947-null-null&spm=3001.4430
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NuR2OWiu-1654067119136)(matplotlib.assets/image-20220522224524581.png)]
plt.boxplot(
x, # 指定要绘制箱线图的数据
notch=None, # 是否是凹口的形式展现箱线图,默认非凹口;
sym=None, # 指定异常点的形状,默认为+号显示;
vert=None, # 是否需要将箱线图垂直摆放,默认垂直摆放;
whis=None, # 指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions=None, # 指定箱线图的位置,默认为[0,1,2…];
widths=None, #指定箱线图的宽度,默认为0.5;
patch_artist=None,# 是否填充箱体的颜色;
meanline=None, # 是否用线的形式表示均值,默认用点来表示;
showmeans=None, # 是否显示均值,默认不显示;
showcaps=None, # 是否显示箱线图顶端和末端的两条线,默认显示;
showbox=None, # 是否显示箱线图的箱体,默认显示;
showfliers=None, # 是否显示异常值,默认显示;
boxprops=None, # 设置箱体的属性,如边框色,填充色等;
labels=None, # 为箱线图添加标签,类似于图例的作用;
flierprops=None, # 设置异常值的属性,如异常点的形状、大小、填充色等;
medianprops=None, # 设置中位数的属性,如线的类型、粗细等;
meanprops=None, # 设置均值的属性,如点的大小、颜色等;
capprops=None, # 设置箱线图顶端和末端线条的属性,如颜色、粗细等;
whiskerprops=None # 设置须的属性,如颜色、粗细、线的类型等;
)
基础箱线图
import matplotlib.pyplot as plt x = [1, 2, 3, 5] # 数据集 plt.boxplot(x) # 垂直显示箱线图 plt.show() # 显示该图 y = [1, 2, 3, 5] # 数据集 plt.boxplot(y, vert=False) # 水平显示箱线图 plt.show() # 显示该图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ssSGPDwU-1654067119138)(matplotlib.assets/image-20220522234526907.png)]
箱线图 - 平均值
import matplotlib.pyplot as plt # 以下两条语句解决中文乱码问题,若语句缺失,则中文以乱码展示 plt.rcParams['font.sans-serif'] = 'SimHei' # 解决中文乱码问题 plt.rcParams['axes.unicode_minus'] = False # 解决坐标轴乱码问题 # showmeans:是否显示平均值, meanline:平均值是否显示为直线, labels:箱线图参数标注 x = [83, 80, 85, 80, 84, 83] # 数据集 plt.boxplot(x, showmeans=True, meanline=True, labels=['分数']) # 垂直显示箱线图 plt.show() # 显示该图
箱线图综合实例
import matplotlib.pyplot as plt
# 设置中文和负号正常显示
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False
# 绘图:daily_Ionset_r_c1_predicted的箱线图
data = [1200, 1300, 1400, 500, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 4000]
plt.boxplot(
x=data, # 指定绘图数据
patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充
showmeans=True, # 以点的形式显示均值
boxprops={'color': 'black', 'facecolor': '#9999ff'}, # 设置箱体属性,填充色和边框色
flierprops={'marker': 'o', 'markerfacecolor': 'red', 'color': 'black'}, # 设置异常值属性,点的形状、填充色和边框色
meanprops={'marker': 'D', 'markerfacecolor': 'indianred'}, # 设置均值点的属性,点的形状、填充色
medianprops={'linestyle': '--', 'color': 'orange'}) # 设置中位数线的属性,线的类型和颜色
plt.show()
多箱型图
import matplotlib.pyplot as plt import numpy as np # 设置中文和负号正常显示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False # 数据集 data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]).reshape(3, 4) plt.boxplot(data, labels=['A', 'B', 'C', 'D']) plt.show()y_Ionset_r_c1_predicted的箱线图 data = [1200, 1300, 1400, 500, 1500, 1600, 1700, 1800, 1900, 2000, 2100, 4000]
plt.boxplot(
x=data, # 指定绘图数据
patch_artist=True, # 要求用自定义颜色填充盒形图,默认白色填充
showmeans=True, # 以点的形式显示均值
boxprops={‘color’: ‘black’, ‘facecolor’: ‘#9999ff’}, # 设置箱体属性,填充色和边框色
flierprops={‘marker’: ‘o’, ‘markerfacecolor’: ‘red’, ‘color’: ‘black’}, # 设置异常值属性,点的形状、填充色和边框色
meanprops={‘marker’: ‘D’, ‘markerfacecolor’: ‘indianred’}, # 设置均值点的属性,点的形状、填充色
medianprops={‘linestyle’: ‘–’, ‘color’: ‘orange’}) # 设置中位数线的属性,线的类型和颜色
plt.show()
**多箱型图** ```python import matplotlib.pyplot as plt import numpy as np # 设置中文和负号正常显示 plt.rcParams['font.sans-serif'] = 'Microsoft YaHei' plt.rcParams['axes.unicode_minus'] = False # 数据集 data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]).reshape(3, 4) plt.boxplot(data, labels=['A', 'B', 'C', 'D']) plt.show()



