CSDN 课程推荐:《Python 数据分析与挖掘》,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个企业级项目。
Matplotlib 系列文章:
- Python 数据分析三剑客之 Matplotlib(一):初识 Matplotlib 与其 matplotibrc 配置文件
- Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性
- Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性
- Python 数据分析三剑客之 Matplotlib(四):线性图的绘制
- Python 数据分析三剑客之 Matplotlib(五):散点图的绘制
- Python 数据分析三剑客之 Matplotlib(六):直方图 / 柱状图 / 条形图的绘制
- Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制
- Python 数据分析三剑客之 Matplotlib(八):等高线 / 等值线图的绘制
- Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制
- Python 数据分析三剑客之 Matplotlib(十):3D 图的绘制
- Python 数据分析三剑客之 Matplotlib(十一):最热门最常用的 50 个图表【译文】
另有 NumPy、Pandas 系列文章已更新完毕,欢迎关注:
- NumPy 系列文章:https://itrhx.blog.csdn.net/category_9780393.html
- Pandas 系列文章:https://itrhx.blog.csdn.net/category_9780397.html
推荐学习资料与网站(博主参与部分文档翻译):
- NumPy 官方中文网:https://www.numpy.org.cn/
- Pandas 官方中文网:https://www.pypandas.cn/
- Matplotlib 官方中文网:https://www.matplotlib.org.cn/
- NumPy、Matplotlib、Pandas 速查表:https://github.com/TRHX/Python-quick-reference-table
文章目录
- 【1x00】方法描述
- 【2x00】简单示例
- 【3x00】多条数据
- 【4x00】设置颜色 / 样式 / 图例
- 【5x00】指定位置显示文本注释
- 【6x00】随机数据散点图
- 【7x00】随机颜色与色条
- 【8x00】不同图像之间的层级调整
- 【9x00】框选部分数据
这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105914929
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
【1x00】方法描述
matplotlib.pyplot.scatter()
方法可用于绘制散点图。
本文用到的其他图像属性可参考前面的两篇文章:
《Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性》
《Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图等基本图像属性》
基本语法:matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, alpha=None, linewidths=None, edgecolors=None, \*\*kwargs)
参数 | 描述 |
---|---|
x,y | 数据位置,标量或类似数组的形式 |
s | 标记的大小,以磅为单位,默认 rcParams['lines.markersize'] ** 2 ,即 6**2=36 |
color / c | 标记的颜色,可以是单个颜色或者一个颜色列表 支持英文颜色名称及其简写、十六进制颜色码等,更多颜色示例参见官网 Color Demo |
marker | 标记的样式,默认为 rcParams["scatter.marker"] = 'o' ,更多样式参见表一 |
cmap | 将浮点数映射成颜色的颜色映射表,即一个 Colormap 实例或注册的颜色表名,仅当 c 是浮点数数组时才使用 cmap |
alpha | 标记的透明度,float 类型,取值范围:[0, 1],默认为 1.0,即不透明 |
linewidths | 标记边缘的线宽,默认为 rcParams["lines.linewidth"] = 1.5 |
edgecolors | 标记边缘的颜色,可以是单个颜色或者一个颜色列表 支持英文颜色名称及其简写、十六进制颜色码等,更多颜色示例参见官网 Color Demo |
表一:marker 标记的样式 |
标记 | 描述 |
---|---|
"." | 点 |
"," | 像素点 |
"o" | 圆圈 |
"v" | 倒三角 |
"^" | 正三角 |
"<" | 左三角 |
">" | 右三角 |
"1" | 倒三叉星 |
"2" | 正三叉星(类似奔驰车标形状) |
"3" | 左三叉星 |
"4" | 右三叉星 |
"8" | 八边形 |
"s" | 正方形 |
"p" | 五边形 |
"P" | 填充的加号(粗加号) |
"+" | 加号 |
"*" | 星形 |
"h" | 六边形(底部是角) |
"H" | 六边形(底部是边) |
"x" | x 号 |
"X" | 填充的 x 号(粗 x 号) |
"D" | 粗菱形(对角线相等) |
"d" | 细菱形(对角线不等) |
"|" | 垂直线 |
"_" | 水平线 |
0 | 水平线靠左 |
1 | 水平线靠右 |
2 | 垂直线靠上 |
3 | 垂直线靠下 |
4 | 左三角(比 "<" 更细) |
5 | 右三角(比 ">" 更细) |
6 | 正三角(比 "^" 更细) |
7 | 倒三角(比 "v" 更细) |
8 | 左三角(比 "<" 更细,靠左显示) |
9 | 右三角(比 ">" 更细,靠右显示) |
10 | 正三角(比 "^" 更细,靠上显示) |
11 | 倒三角(比 "v" 更细,靠下显示) |
"None" / " " / "" | 无样式 |
'$...$' | 支持 LaTeX 数学公式,表达式用美元符号包围起来 |
【2x00】简单示例
import numpy as np
import matplotlib.pyplot as pltx = np.arange(0, 10, 1)
y = np.array([3, 8, 1, 5, 7, 2, 3, 4, 5, 7])
plt.scatter(x, y)plt.show()
【3x00】多条数据
绘制多条数据,设置不同数据,然后多次调用 plt.scatter()
函数即可,不同数据的线条颜色会不同,系统随机,可单独指定不同颜色。
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2*np.pi, 2*np.pi, 1)
y1 = np.sin(3*x)/x
y2 = np.sin(2*x)/x
y3 = np.sin(1*x)/x
plt.title('多数据散点图示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')plt.scatter(x, y1)
plt.scatter(x, y2)
plt.scatter(x, y3)plt.show()
【4x00】设置颜色 / 样式 / 图例
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = np.arange(-2*np.pi, 2*np.pi, 1)
y1 = np.sin(3*x)/x
y2 = np.sin(2*x)/x
y3 = np.sin(1*x)/x
plt.title('散点图自定义样式示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')plt.scatter(x, y1, color='g', s=30, label='(x, y1)') # 默认绿色样式
plt.scatter(x, y2, color='r', s=40, marker='d', label='(x, y2)') # 红色菱形
plt.scatter(x, y3, color='b', s=50, marker='2', label='(x, y3)') # 蓝色正三叉星plt.legend(framealpha=0) # 显示图例,设置为全透明plt.show()
【5x00】指定位置显示文本注释
matplotlib.pyplot.annotate()
方法可以在指定位置显示文本注释,参数解释常见前文:
《Python 数据分析三剑客之 Matplotlib(二):文本描述 / 中文支持 / 画布 / 网格等基本图像属性》
应用举例:
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x = [0.13, 0.22, 0.39, 0.59, 0.68, 0.74, 0.93]
y = [0.75, 0.34, 0.44, 0.52, 0.80, 0.25, 0.55]plt.title('散点图添加文本注释示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.xlim([0, 1]) # 设置 x 轴刻度的范围
plt.ylim([0, 1]) # 设置 y 轴刻度的范围plt.scatter(x, y, marker='o', s=50)
for m, n in zip(x, y):plt.annotate('(%s,%s)' % (m, n),xy=(m, n),xytext=(0, -10),textcoords='offset points',ha='center', # 点在注释文本的中心va='top') # 点在注释文本的上方plt.show()
这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105914929
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!
【6x00】随机数据散点图
随机数据可以用 numpy 的 random 模块来实现。
numpy.random.rand(d0, d1, …, dn)
:根据给定维度生成 [0,1) 之间的数据。
numpy.random.randn(d0, d1, …, dn)
:返回一个或一组具有标准正态分布的样本。
numpy.random.randint(low, high, size)
:返回随机整数,范围区间为 [low,high),size 为数组维度大小
应用举例:
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']N = 1000
x = np.random.randn(N)
y = np.random.randn(N)plt.title('散点图随机数据示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.scatter(x, y, alpha=0.5)plt.show()
【7x00】随机颜色与色条
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']N = 1000
x = np.random.randn(N)
y = np.random.randn(N)color = np.random.rand(N)
size = np.random.rand(N) * 1000plt.figure(figsize=(8.4, 5.8)) # 设置画布大小 840x580
plt.title('散点图随机大小颜色示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.scatter(x, y, c=color, s=size, alpha=0.5)plt.show()
可以用 pyplot.colorbar()
方法绘制颜色对照条。
基本语法:matplotlib.pyplot.colorbar([mappable=None, cax=None, ax=None, **kw])
部分参数解释如下表,其他参数,如长度,宽度等请参考官方文档。
参数 | 描述 |
---|---|
mappable | 要设置色条的图像对象,该参数对于 Figure.colorbar 方法是必需的,但对于 pyplot.colorbar 函数是可选的 |
cax | 可选项,要绘制色条的轴 |
ax | 可选项,设置色条的显示位置,通常在一个画布上有多个子图时使用 |
**kw | 可选项,其他关键字参数,参考官方文档 |
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']N = 1000
x = np.random.randn(N)
y = np.random.randn(N)color = np.random.rand(N)
size = np.random.rand(N) * 1000plt.figure(figsize=(8.4, 5.8))
plt.title('散点图颜色对照条示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')
plt.scatter(x, y, c=color, s=size, alpha=0.5)
plt.colorbar()plt.show()
【8x00】不同图像之间的层级调整
zorder
参数用于设置不同图像之间的层级关系,数字越大,所处的层级越大,即显示越靠上。
未设置 zorder
参数前:
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x1 = np.arange(-2*np.pi, 2*np.pi, 0.01)
y1 = np.sin(3*x1)/x1
x2 = np.arange(-2*np.pi, 2*np.pi, 1)
y2 = np.sin(3*x2)/x2plt.title('不同图像之间层级调整示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')plt.plot(x1, y1, c='b', linewidth=3.5, label='线性图')
plt.scatter(x2, y2, c='r', s=40, label='散点图')
plt.legend()plt.show()
设置 zorder
参数后:
import numpy as np
import matplotlib.pyplot as pltplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']x1 = np.arange(-2*np.pi, 2*np.pi, 0.01)
y1 = np.sin(3*x1)/x1
x2 = np.arange(-2*np.pi, 2*np.pi, 1)
y2 = np.sin(3*x2)/x2plt.title('不同图像之间层级调整示例')
plt.xlabel('x 轴')
plt.ylabel('y 轴')plt.plot(x1, y1, zorder=1, c='b', linewidth=3.5, label='线性图')
plt.scatter(x2, y2, zorder=2, c='r', s=40, label='散点图')
plt.legend()plt.show()
【9x00】框选部分数据
有时候我们希望能够框选一部分数据来强调其重要性,matplotlib.patches.Polygon()
方法的作用是生成不规则的多边形补丁,matplotlib.patches
还有另外的方法可以生成矩形、圆形等其他图形,具体参见前面的文章《Python 数据分析三剑客之 Matplotlib(三):图例 / LaTeX / 刻度 / 子图 / 补丁等基本图像属性》,生成补丁之后,通过 axes.add_patch()
方法将其添加到绘图区(axes)即可。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpathesplt.rcParams['font.sans-serif'] = ['Microsoft YaHei']plt.figure(figsize=(8.4, 5.8))x1 = np.arange(0, 1000, 10)
y1 = np.random.randint(0, 1000, 100)
x2 = np.arange(0, 500, 10)
y2 = np.random.randint(200, 800, 50)
x3 = np.random.randint(50, 800, 80)
y3 = np.random.randint(50, 800, 80)
x4 = np.array([0, 100, 300, 400, 350, 500, 450, 367, 420, 490])
y4 = np.array([267, 800, 453, 500, 600, 420, 380, 503, 390, 600])plt.title('散点图数据框选示例', fontsize=15)
plt.xlabel('x 轴', fontsize=15)
plt.ylabel('y 轴', fontsize=15)
plt.scatter(x1, y1, c='r', s=50, alpha=0.7, label='RED')
plt.scatter(x2, y2, c='b', s=100, alpha=0.7, label='BLUE')
plt.scatter(x3, y3, c='g', s=150, alpha=0.7, label='GREEN')
plt.scatter(x4, y4, c='y', s=250, alpha=0.7, label='YELLOW')
plt.legend(loc='upper right', borderpad=1, edgecolor='k', framealpha=1, labelspacing=1)Polygon_point = [[100, 800], [0, 267], [500, 420], [490, 600]] # 多边形补丁的顶点坐标
polygon = mpathes.Polygon(Polygon_point, color='#FF69B4', alpha=0.3) # 绘制补丁,框选部分数据
ax = plt.gca() # 获取当前绘图区(gca = Get Current Axes)
ax.add_patch(polygon) # 将补丁添加到当前绘图区plt.show()
这里是一段防爬虫文本,请读者忽略。
本文原创首发于 CSDN,作者 TRHX。
博客首页:https://itrhx.blog.csdn.net/
本文链接:https://itrhx.blog.csdn.net/article/details/105914929
未经授权,禁止转载!恶意转载,后果自负!尊重原创,远离剽窃!