Matplotlib 常用可视化操作

Matplotlib 常用可视化操作

0. matplotlib 介绍

matplotlib是python的一个绘图库。使用它可以很方便的绘制出版质量级别的图形。

官方文档:

  • https://matplotlib.org/api/pyplot_summary.html

matplotlib 基本功能

  1. 基本绘图 (在二维平面坐标系中绘制连续的线)
    1. 设置线型、线宽和颜色
    2. 设置坐标轴范围
    3. 设置坐标刻度
    4. 设置坐标轴
    5. 图例
    6. 特殊点
    7. 备注
  2. 图形对象(图形窗口)
    1. 子图
    2. 刻度定位器
    3. 刻度网格线
    4. 半对数坐标
    5. 散点图
    6. 填充
    7. 条形图
    8. 饼图
    9. 等高线图
    10. 热成像图
    11. 三维曲面
    12. 简单动画
# 使用matplotlib前,先做如下操作

# 导包
import matplotlib.pyplot as plt

# 使中文正常显示
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

1. 简单辅助线

axhline() 方法创建 水平线
axvline() 方法创建 垂直线

  • x 或 y:线的出发点
  • c:线条颜色
  • ls:线条风格
    • 常见取值有实线(’-’)、虚线(’–’)、点虚线(’-.’)、点线(’:’)
  • lw:线条宽度
# 绘制水平线 和 垂直线
plt.axhline(y=2, ls=":", c="blue", lw=5)  # 添加水平直线
plt.axvline(x=4, ls="-", c="red")  # 添加垂直直线

在这里插入图片描述

vlines() 方法, 绘制一条或多条垂直线
hlines() 方法, 绘制一条或多条水平线

参数, 以vlines为例:

  • x: 横坐标
  • ymin,ymax:辅助线纵坐标的最小值、最大值
plt.vlines(x=[2, 3, 3.5],  		# 垂线的x坐标值
           ymin=[10, 20, 30],  	# 每条垂线起始y坐标
           ymax=[25, 35, 45],  	# 每条垂线结束y坐标
           colors="red")  		# 线的颜色
           
plt.hlines(20, 2.2, 3.2, colors="blue")

在这里插入图片描述

axvspan() 与 axhspan() 绘制一个横跨当前图表的垂直/水平区域

主要参数, 以axvspan为例:

  • xmin:参考区域的起始位置
  • xmax:参考区域的终止位置
  • ymin=0, ymax=1 占据图片的大小 ymin=0表示从图片最底部开始显示, ymax=1表示到图片最上部为止
  • facecolor:参考区域的填充颜色
  • alpha:参考区域的填充颜色的透明度
plt.hlines(5,1,10)
plt.vlines(5,1,10)

# 绘制纵向区域
plt.axvspan(xmin=3, 				# 确定纵向区域在x轴的起始点
            xmax=4, 				# 确定纵向区域在x轴的结束点
            ymin=0.2, 				# 确定纵向区域在图片底部中起始的百分比位置
            ymax=0.8, 				# 确定纵向区域在图片上部中结束的百分比位置
            facecolor='green', 		# 区域颜色
            alpha=0.5)				# 区域透明度

# 绘制横向区域
plt.axhspan(6,7,0,1,facecolor='black',alpha=0.3)

在这里插入图片描述


2. 坐标轴设置

用figure() 函数创建图表

参数: ‘sub-fig’, #窗口标题栏文本
figsize=(4, 3), #窗口大小 <元组>
facecolor=’’ #图表背景色

plt.figure('A',                  	# 图表名称, (显示在左上方)
           figsize=(2, 2), 			# 图表大小
           facecolor='yellow')		# 图表的背景色
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.show()

用PyCharm运行打开的图表

在这里插入图片描述

可以一次打开多个图表

plt.figure('A', figsize=(2, 2), facecolor='yellow')
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.figure('B', figsize=(2, 2), facecolor='red')
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.show()

在这里插入图片描述

设置x轴 与 y轴的名称

  • xlabel() 和 ylabel()
plt.xlabel("x轴")
plt.ylabel("y轴")

设置x轴 与 y轴的数据范围

  • xlim() 和 ylim()
plt.xlim(0, 100)
plt.ylim(100, 200)

在这里插入图片描述

设置x轴和y轴的坐标刻度

  • xticks() 和 yticks()
  • 至少给vals参数: 设置轴刻度的数据
  • 可以给texts参数: 设置轴刻度显示的字
vals = [1,2,3,4]
texts = ['壹', '贰', '叄', '肆']
plt.xticks(vals, texts)
plt.yticks([])				# 不想显示任何轴刻度, 直接给个空列表

在这里插入图片描述

设置图表标题

  • title()函数可以设置标题
    • 字符串参数为标题
    • fontsize为大小
    • color, alpha…
plt.title('测试')

在这里插入图片描述

移动坐标轴 & 改变轴颜色

  • 用gca()方法, 获取当前坐标系对象
  • 然后通过坐标系对象的spines[ ] 方法获取想要的坐标轴, [ ] 内用字符串写坐标轴的名字
    • 共有上下左右4个坐标轴, 名字分别是: top, bottom, left, right
  • 坐标轴对象可以用set_color() 方法修改颜色
  • 坐标轴对象可以用set_position() 方法修改位置
    • 方法内参数固定写法: set_position((‘data’, num)) num为想要移动到的位置刻度
plt.xlim(-10, 10)				# 修改x轴数据范围
plt.ylim(-10, 10)				# 修改y轴数据范围

ax = plt.gca()  				# 获取当前坐标系对象

top_axis = ax.spines['top']		# 根据名字获取坐标轴对象
top_axis.set_color('none')		# 将上轴设置为全透明

right_axis = ax.spines['right'].set_color('none')	# 获取右坐标轴对象, 并设置为透明

left_axis = ax.spines['left']			# 获取做左标轴对象
left_axis.set_position(('data', 0))		# 将左坐标轴移动到x=0的位置

bottom_axis = ax.spines['bottom'].set_position(('data', 0))	# 获取下坐标轴对象, 并移动到y=0的位置

plt.yticks([10,5,0,-5,-10],[10,5,'',-5,-10])	# 修改y轴刻度,以及刻度的显示
plt.xticks([10,5,0,-5,-10],[10,5,0.0,-5,-10])	# 修改x轴刻度,以及刻度的显示
plt.title(r'$x^n+y^n=z^n$')						# 用Latex写坐标系名称

在这里插入图片描述

其他一些坐标轴的方法和参数

plt.figure('A', 					# 图表名称
           figsize=(5, 5), 			# 图表大小
           facecolor='yellow')		# 图表背景色
plt.title('Test-A', fontsize=18)	# 图表显示的标题和大小
plt.grid()							# 显示网格
plt.xlabel('x轴', fontsize=12)		# 显示x轴标题
plt.ylabel('y轴', fontsize=12)		# 显示y轴标题
plt.tick_params(axis='x', 				# 修改x轴相关数据 {x, y, both}
                top=True, 				# 显示上轴标点
                labeltop=True, 			# 显示说轴刻度值
                labelsize=15, 			# 刻度值文字大小
                labelcolor='g', 		# 刻度值文字颜色
                width=10, 				# 刻度点宽度
                length=10, 				# 刻度点长度
                color='b', 				# 刻度点颜色
                labelrotation=45)		# 刻度值文字旋转度数
plt.xlim(0, 100)				# x轴取值范围
plt.ylim(0, 100)				# y轴取值范围

plt.figure('B', figsize=(4, 4))
plt.title('Test-B', fontsize=10)y
plt.grid(linestyle=":", color='y')
plt.xlabel('x轴', fontsize=12)
plt.ylabel('y轴', fontsize=12)
plt.tick_params(axis='both', labelsize=12)
plt.xlim(0, 100)
plt.ylim(0, 100)

在这里插入图片描述
在这里插入图片描述


3. 显示图例 (legend & label)

plt.legend() 函数, 用于显示图例

  • 在画线时候, 可以在方法内写一个label参数 (字符串), 用以显示图例
  • 但是图例不会自动显示, 必须调用legend() 函数才能显示图例
  • legend() 函数有一个loc参数 (字符串 or 整数code形式), 代表显示图例的位置, 默认为0 (best)
  • 包含以下可选参数:
    • ‘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
plt.xlim(0, 11)
plt.ylim(0, 10)

plt.hlines(5,1,10, label='横线')
# 用ledgend函数,否则label不显示
plt.legend()

在这里插入图片描述

# 将图例显示在左下方

plt.xlim(0, 11)
plt.ylim(0, 10)

plt.hlines(5,1,10, label='横线')

plt.legend(loc=3)

在这里插入图片描述

可以分开显示不同的图例

  • 由于创建一个图例会覆盖的原先的图例, 所有在前面的图例需要用变量来保存, 然后用ass_artist() 函数传给当前坐标系对象
plt.xlim(0, 11)
plt.ylim(0, 11)

p1=plt.hlines(5,1,10, color='r', linestyle=':')		# 创建横线对象
p2=plt.vlines(5,1,10, color='b', linestyle='-.')	# 创建竖线对象

le1 = plt.legend([p1],['横线'], loc=7)				# 给横线对象设置图例, 并指定位置
le2 = plt.legend([p2], ['竖线'], loc="upper center")	# 给竖线对象设置图例, 并指定位置
plt.gca().add_artist(le1)		# 将第一个图例添加给当前坐标系对象
plt.show()		# 显示

在这里插入图片描述


4. 显示备注 (annotate & test)

用annotate()函数可用于显示带箭头的备注

基本参数:

  • 用字符串表示要显示的文本内容
  • xycoords=“data” 备注目标点所使用的坐标系("data"表示数据坐标系)
  • xy=(x, y) 备注目标点的坐标
  • textcoords=‘offset points’ 备注文本所使用的坐标方法(offset points表示参照点的偏移坐标系)
  • xytext=(x, y) 备注文本的坐标
  • fontsize=14 备注文本的字体大小
  • arrowprops=dict() 使用字典定义文本指向目标点的箭头样式
    • arrowstyle=" " 定义箭头样式
      • ‘-’ None
      • ‘->’ head_length=0.4,head_width=0.2
      • ‘-[’ widthB=1.0,lengthB=0.2,angleB=None
      • ‘|-|’ widthA=1.0,widthB=1.0
      • ‘-|>’ head_length=0.4,head_width=0.2
      • ‘<-’ head_length=0.4,head_width=0.2
      • ‘<->’ head_length=0.4,head_width=0.2
      • ‘<|-’ head_length=0.4,head_width=0.2
      • ‘<|-|>’ head_length=0.4,head_width=0.2
      • ‘fancy’ head_length=0.4,head_width=0.4,tail_width=0.4
      • ‘simple’ head_length=0.5,head_width=0.5,tail_width=0.2
      • ‘wedge’ tail_width=0.3,shrink_factor=0.5
    • connectionstyle=" " 定义连接线的样式
      • ‘angle’ angleA=90,angleB=0,rad=0.0
      • ‘angle3’ angleA=90,angleB=0`
      • ‘arc’ angleA=0,angleB=0,armA=None,armB=None,rad=0.0
      • ‘arc3’ rad=0.0
      • ‘bar’ armA=0.0,armB=0.0,fraction=0.3,angle=None
plt.xlim(0, 11)
plt.ylim(0, 11)

p1=plt.hlines(5,1,10, color='r', linestyle=':')
plt.annotate("测试", 						# 备注的文本
             xycoords="data", 				# 目标点的坐标系
             xy=(6,5),						# 目标点的坐标
             textcoords='offset points',	# 备注文本的坐标用偏移坐标系表示
             xytext=(50,50),				# 文本坐标离目标点的偏移量
             fontsize=14,					# 备注文本的大小
             arrowprops=dict(
                  arrowstyle= '->',
                  connectionstyle= 'arc'
            ))

在这里插入图片描述

plt.xlim(0, 11)
plt.ylim(0, 11)

p1=plt.hlines(5,1,10, color='r', linestyle=':')
plt.annotate("测试", 
             xycoords="data", 
             xy=(6,5),
             xytext=(2,7),			# 不写textcoords参数, 默认以坐标位置显示备注文本的位置
             fontsize=14,
             color='b',
             arrowprops=dict(
                  arrowstyle= '-[',
                  connectionstyle= 'angle3'
            ))

在这里插入图片描述

用text()函数可以在指定位置显示文本

text()函数可以在图表中显示文本

  • x, y 参数: 用于指定显示位置
  • 字符串参数: 显示的文本
  • ha, va参数: 文本显示位于坐标点的位置, 默认坐标点位于文本的左下角
  • size, color…
plt.xlim(0, 100)
plt.ylim(0, 100)
plt.text(50,50,'test',size=30)

显示的文字位置是以文本左下角为起始点

在这里插入图片描述

调用ha和va参数, 使位置在坐标点中间显示

plt.xlim(0, 100)
plt.ylim(0, 100)
plt.text(50,50,'test',size=30, ha='center', va='center')

在这里插入图片描述


5. 支持LaTex语法

善于生成复杂表格和数学公式,非常适用于生成高印刷质量的科技和数学类文档

在matplotlib中, 可以使用LaTex编写公式并输出; (Typora中也支持LaTex表达式)

写法:

  • 在字符串前加 " r ", 用于防止字符转义的
  • 在字符串开头和结尾都写上 " $ "
  • 在中间写LaTex语法
  • 用 { } 嵌套其他LaTex语句

在这里插入图片描述

在这里插入图片描述


例1 :

r'$x^n+y^n=z^n$',   r'$\int\frac{1}{x} dx = \ln |x| + C$',     r'$-\frac{\pi}{2}$'

输出: x n + y n = z n x^n+y^n=z^n xn+yn=zn, ∫ 1 x d x = ln ⁡ ∣ x ∣ + C \int\frac{1}{x} dx = \ln |x| + C x1dx=lnx+C, − π 2 -\frac{\pi}{2} 2π


6. 子图

矩阵式布局

用 subplot() 方法操作子图有:

  • rows: 几行
  • columns: 几列
  • num: 第几个
plt.subplot(2,2,1)		# 显示2x2图集中的第一个图表
plt.text(0.5,0.5,'1',size=55,ha='center',va='center')	# 在第一个图表中显示文本'1'
plt.subplot(2,2,4)		# 显示2x2图集中的第四个图表
plt.text(0.5,0.5,'4',size=55,ha='center',va='center')	# 在第四个图表中显示文本'4'

在这里插入图片描述

循环输出9个图表

for i in range(1,10):
    plt.subplot(3,3,i)					# 显示3x3列表矩阵中的第N个
    plt.xticks([])						# 隐藏x轴刻度
    plt.yticks([])						# 隐藏y轴刻度
    plt.title(i, color='red', fontsize=20)	# 显示标题
    plt.axhline(y=2)			# 显示一条水平线,穿过y=2点
    plt.axvline(x=2)			# 显示一条垂直线,穿过x=2点

在这里插入图片描述

网格式布局

用matplotlib.gridspec库下的GridSpec() 函数创建图表

在用subplot() 函数来进行图表切割 (按0为1计数)

import matplotlib.gridspec as mg			# 导包

gs = mg.GridSpec(3,3)						# 创建一个3x3的网格式布局图表

plt.subplot(gs[0,:2])			# 切割: 切第1行,第1~2列
plt.text(0.5, 0.5,'1',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])

plt.subplot(gs[:2,-1])			# 切割: 切第1~2行,最后1列
plt.text(0.5, 0.5,'2',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])

plt.subplot(gs[1,1])			# 切割: 切第2行,第2列
plt.text(0.5, 0.5,'3',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])

plt.subplot(gs[1:3,0])			# 切割: 切第2~3行,第1列
plt.text(0.5, 0.5,'4',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])

plt.subplot(gs[2,1:3])			# 切割: 切第3行,第2~3列
plt.text(0.5, 0.5,'5',size=30,ha='center',va='center')
plt.xticks([])
plt.yticks([])

在这里插入图片描述

自由式布局

用plt.axes()函数自由设置图标的位置,给出左下角点坐标与宽高即可

  • left_bottom_x 参数: 左下角点x坐标 (实际给出的不是坐标, 是一个比例)
  • left_bottom_y 参数: 左下角点y坐标 (实际给出的不是坐标, 是一个比例)
  • width 参数: 宽度
  • height 参数: 高度
plt.figure('FlowLayout', facecolor='lightgray')		# 以灰色基底创建图表,方便观察

plt.axes([0, 0, 0.5, 0.3])				# 在最左下角, 建一个宽=0.5高=0.3的图表	
plt.text(0.5, 0.5, 1, ha='center', va='center', size=36)

plt.axes([0.25, 0.35, 0.5, 0.3])		# 在x=0.25y=0.35的位置, 建一个宽=0.5高=0.3的图表	
plt.text(0.5, 0.5, 2, ha='center', va='center', size=36)

plt.axes([0.5, 0.7, 0.5, 0.3])			# 在x=0.5y=0.7的位置, 建一个宽=0.5高=0.3的图表	
plt.text(0.5, 0.5, 3, ha='center', va='center', size=36)

在这里插入图片描述


7. plot() 折线图

基本参数

plot()函数用于绘制一条直线, 将每个坐标点连接起来

plot([x], [y], label, color, marker, linestyle, linewidth, alpha)

  • [x] x轴的坐标点 (传参时, 不能给参数名), 可以传入array, 列表, series等一维序列

  • [y] y轴的坐标点 (传参时, 不能给参数名), 可以传入array, 列表, series等一维序列

    • 如果只写了一个列表, 默认为y轴坐标点列表, x轴坐标点默认为y轴坐标对应数量的 [1,2,3,…] 递增
    • 如果写了2个列表, 默认第一个列表为x轴坐标, 第二个列表为y轴坐标
  • linewidth: 表示线的粗细

  • alpha: 表示透明度

  • color: 颜色参数

    • 可用 rgb 或 rgba 的三元色方法表示颜色; 第四个数表示透明的

      • (0.2, 0.5, 0.6) 或 (0.2, 0.5, 0.6, 0.5)
    • 用英文单词, 或英文单词缩写

    在这里插入图片描述

- ​	``'b'``          blue 蓝
- ​    ``'g'``          green 绿
- ​    ``'r'``          red 红
- ​    ``'c'``          cyan 蓝绿
- ​    ``'m'``          magenta 洋红
- ​    ``'y'``          yellow 黄
- ​    ``'k'``          black 黑
- ​    ``'w'``          white 白
  • marker: 坐标点样式参数

    1. '.' point marker
    2. ',' pixel marker
    3. 'o' circle marker
    4. 'v' triangle_down marker
    5. '^' triangle_up marker
    6. '<' triangle_left marker
    7. '>' triangle_right marker
    8. '1' tri_down marker
    9. '2' tri_up marker
    10. '3' tri_left marker
    11. '4' tri_right marker
    12. 's' square marker
    13. 'p' pentagon marker
    14. '*' star marker
    15. 'h' hexagon1 marker
    16. 'H' hexagon2 marker
    17. '+' plus marker
    18. 'x' x marker
    19. 'D' diamond marker
    20. 'd' thin_diamond marker
    21. '|' vline marker
    22. '_' hline marker
  • linestyle: 线样式参数

    1. '-' solid line style 实线
    2. '--' dashed line style 虚线
    3. '-.' dash-dot line style 点画线
    4. ':' dotted line style 点线

绘制折线

# 设置轴值范围
plt.xlim(0, 10)
plt.ylim(0, 10)

# 写两个列表
plt.plot([1,2,4,5,6,7,7.6,9], 			# 写x轴的坐标
         [0.1,1,3,3.5,7,7.2,9,9.5], 	# 写y轴的坐标
         color='b',						# 设置颜色
         label='设置x和y',				  # 设置标签
         linewidth=3,					# 设置线宽
         marker='+',					# 设置坐标点样式
         linestyle=':',					# 设置线样式
		 alpha=0.7)						# 设置透明度
# 写一个列表
plt.plot([8,9,7,6,8,4,5,6,4],color='y', label='只设置y',marker='o',linestyle='--')

# 用ledgend函数,否则label不显示
plt.legend()

在这里插入图片描述

绘制曲线

  • 当坐标点足够的的时候, 折线就变为了曲线
  • 一个plot函数内可以设置多条线
    • plot(x, y, [fmt], x2, y2, [fmt2], …)
    • [fmt] 参数: 可以以字符串形式同时以简写方式设置颜色, 坐标样式和线样式
x = np.linspace(-np.pi,np.pi,200) # 将-3.1415到3.1415之间等分成200个点
y1 = np.cos(x)  # 余弦
y2 = np.sin(x)  # 正弦

# 绘制正弦曲线 以及 余弦曲线
plt.plot(x, y1, 'b--', x, y2, 'r:') 

在这里插入图片描述

颜色填充

用fill_between()函数 以某种颜色自动填充两条曲线的闭合区域

  • x, # x轴的水平坐标
  • y1, # 下边界曲线上点的垂直坐标
  • y2, # 上边界曲线上点的垂直坐标
  • y1<y2, # 填充条件,为True时填充
  • color=‘r’, # 填充颜色
  • alpha=0.2 # 透明度
x = np.linspace(-np.pi,np.pi,200) # 将-3.1415到3.1415之间等分成200个点
y1 = np.cos(x)  # 余弦
y2 = np.sin(x)  # 正弦

# 绘制正弦曲线 以及 余弦曲线
plt.plot(x, y1, 'b:', x, y2, 'r:') 

# 将y2线在y1线上的空间填充为红色
p1 = plt.fill_between(x,				# x轴的坐标数组
                      y1,				# y1线曲线上的y坐标点
                      y2,				# y2线曲线上的y坐标点
                      y1<y2,			# 设置条件: 当y1<y2为True时
                      color='r',		# 设置填充颜色
                      alpha=0.5)		# 设置透明度

# 将y2线在y1线下的空间填充为蓝色
p2 = plt.fill_between(x,
                      y1,
                      y2,
                      y1>y2,
                      color='b',
                      alpha=0.5)
# 显示图例
plt.legend([p1, p2],['sin(x)>cos(x)', 'cos(x)<sin(x)'])

在这里插入图片描述


8. scatter() 散点图

基本参数

scatter()函数用于标记坐标点, 可生成散点图

plt.scatter(
   x, 					# x轴坐标数组
   y,					# y轴坐标数组
   marker='', 			# 点型
   s=10,				# 大小
   color='',			# 颜色
   edgecolor='', 		# 边缘颜色
   facecolor='',		# 填充色
   zorder=''			# 图层序号
)
  • x参数: 标记点的x轴坐标, 多个点可用列表,ndarray,series

  • y参数: 标记点的y轴坐标, 多个点可用列表,ndarray,series

  • s参数: 坐标点样式的大小, 可以传入数组, 使每个点的大小不一样

  • marker参数: 坐标点的图形样式

在这里插入图片描述

  • edgecolor参数: 边缘色

  • facecolor参数: 内部填充色

  • alpha参数: 透明度

  • zorder参数: 图层位置

  • c 参数: 定义每个散点的颜色值

  • cmap参数: 定义颜色映射方案, 为每个颜色设置颜色

在这里插入图片描述

标记特殊点

在scatter()函数中标明x和y的位置即可,

  • 第一个位置是x第二个是y
plt.xlim(0, 11)
plt.ylim(0, 11)

p1=plt.hlines(5,1,10, color='r', linestyle=':')	# 画线
plt.scatter(6,5)			# 标记特殊坐标点

在这里插入图片描述

在一个scatter()函数中标记多个特殊点

plt.xlim(0, 11)
plt.ylim(0, 11)

p1=plt.hlines(5,1,10, color='r', linestyle='--')
plt.scatter(x=[3,4,6],			# 3个点的x轴的坐标
            y=[5,5,5], 			# 3个点的y轴的坐标
            s=200, 				# 点的大小
            edgecolor='red', 	# 边缘色
            facecolor='b', 		# 填充色
            zorder=3, 			# 图层位置 (可用于覆盖其他图像)
            alpha=0.9,			# 透明度
            marker='o')			# 点的样式

在这里插入图片描述

绘制散点图

随机生成正态分布的身高和年龄, 以身高为x轴坐标点, 年龄为为y轴坐标点, 绘制散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)

plt.scatter(x=x,
            y=y, 
            s=20, 
            color='red', 
            label='身高年龄分布点', 
            marker='+')
plt.legend(loc=3)

在这里插入图片描述

将每个点的颜色, 根据年龄, 显示不同的颜色

  • 用c参数 & cmap参数
import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)

plt.scatter(x,y, 
            s=30, 
            c=y, 						# c 参数: 定义每个散点的颜色值
            cmap='brg', 				# cmap参数: 定义颜色映射方案, 为每个颜色设置颜色
            label='身高年龄分布点', 
            marker='x')
plt.legend(loc=3)

在这里插入图片描述

将每个点的颜色, 根据离年龄和身高平均值的举例, 显示不同的颜色和大小

import numpy as np
import matplotlib.pyplot as plt

x = np.random.normal(175, 7, 300)
y = np.random.normal(30, 5, 300)

dis1 = np.sqrt((x-175)**2 + (y-30)**2)
dis2 = 25-dis1

plt.scatter(x,y, 
            s=dis2, 				# s参数控制点的大小, 可以传入数组
            c=dis1, 
            cmap='brg', label='身高年龄分布点', marker='o')
plt.legend(loc=3)

在这里插入图片描述


9. bar() 柱状图

基本参数

plt.bar(
	x,				# 水平坐标数组
    y,				# 柱状图高度数组
    width,			# 柱子的宽度
    color='', 		# 填充颜色
    label='',		#
    alpha=0.2		#
)	

简单柱状图

# 导包
import numpy as np
import matplotlib.pyplot as plt

# 使图表能正常显示中文
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

apples = np.random.normal(60,10,12)	# 以正态分布随机生成12个变量代表苹果销量
month = np.arange(12)		# 生成1~12的数字代表月份

plt.bar(month, 				# 以月份为x轴
        apples, 			# 以销量为y轴
        0.8, 				# 柱状图宽度
        color='blue', 		# 柱子颜色
        alpha=0.4,			# 透明度
        label='苹果销量图')	 # 图例

# 修改x轴刻度的显示
plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
# 修改x轴字体的旋转度
plt.tick_params(axis='x',labelrotation=45)
# 显示图例
plt.legend()

在这里插入图片描述

堆叠柱状图

apples = np.random.normal(60,10,12)		# 以正态分布随机生成12个变量代表苹果销量
oranges = np.random.normal(60,10,12)	# 以正态分布随机生成12个变量代表橘子销量
month = np.arange(12)		# 生成1~12的数字代表月份

# 苹果销量柱状图
plt.bar(month, 				# 以月份为x轴
        apples, 			# 以销量为y轴
        0.8, 				# 柱状图宽度
        color='blue', 		# 柱子颜色
        alpha=0.4,			# 透明度
        label='苹果销量图')	 # 图例
# 橘子销量柱状图
plt.bar(month, oranges, 0.8, color='orange', alpha=0.8, label='橘子销量图')

# 修改x轴刻度的显示
plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
# 修改x轴字体的旋转度
plt.tick_params(axis='x',labelrotation=45)
# 显示图例
plt.legend()

两个柱状图是相互叠加的
由于设置了透明度, 所以还能看得出来哪个销量比哪个高

在这里插入图片描述

左右柱状图

# 随机生成苹果和橘子的销量, 以及月份
apples = np.random.normal(60,10,12)
oranges = np.random.normal(60,10,12)
month = np.arange(12)

# 修改x轴参数可以达到左右移动柱子的效果, 在降低width宽度, 可以达到柱子并排显示的效果
plt.bar(month-0.2, apples, 0.4, color='blue', alpha=0.4, label='苹果销量图')
plt.bar(month+0.2, oranges, 0.4, color='orange', alpha=0.8, label='橘子销量图')

plt.xticks(month, ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月','十二月'])
plt.tick_params(axis='x',labelrotation=45)
plt.legend()

在这里插入图片描述


10. hist() 统计直方图

常常用于统计数值的频数, 可以直观的看到哪些数值多, 哪些数值少

常用参数

plt.hist(
    x, 					# 值列表		
    bins, 				# 直方柱数量
    color, 				# 颜色
    edgecolor 			# 边缘颜色
)

简单直方图

# 随机生成服从正态分布的200个学生的成绩, 平均分为70, 方差为5
ary = np.random.normal(70,5,200)

# 生成直方图
plt.hist(ary, 					# 值列表, hist()函数会自动统计每个数据的频数, 并以直方图显示
         bins=50, 				# 直方的数量
         color='b', 
         edgecolor='y', 
         label='学生成绩分布图')

plt.legend()		# 显示图例
plt.xlabel("成绩")	# 显示x轴名称
plt.ylabel("数量")	# 显示y轴名称

在这里插入图片描述


11. pie()饼状图

常用参数

plt.pie(
    values, 		# 值列表		
    spaces, 		# 扇形之间的间距列表
    labels, 		# 标签列表
    colors, 		# 颜色列表
    '%d%%',			# 标签所占比例格式
	shadow=True, 	# 是否显示阴影
    startangle=90	# 逆时针绘制饼状图时的起始角度
    radius=1		# 半径
)

简单饼状图

import matplotlib.pyplot as plt
import numpy as np

plt.figure('pie', facecolor='lightgray')
plt.title('Pie', fontsize=20)

# 整理数据
values = [15, 13.3, 8.5, 7.3, 4.62, 51.28]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01, 0.01]
labels = ['Java', 'C', 'Python', 'C++', 'VB', 'Other']
colors = ['dodgerblue', 'orangered', 'limegreen', 'violet', 'gold','blue']

# 等轴比例
plt.axis('equal')

plt.pie(
    values,  				# 值列表
    spaces,  				# 扇形之间的间距列表
    labels,  				# 标签列表
    colors,  				# 颜色列表
    '%d%%',  				# 标签所占比例格式
    shadow=True,  			# 是否显示阴影
    startangle=90,  		# 逆时针绘制饼状图时的起始角度
    radius=1  				# 半径
)
plt.legend()
plt.show()

在这里插入图片描述


12. 其他数据可视化工具:

  • Echarts
  • seaborn
  • Pandas
  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值