Python数据分析与展示-Matplotlib

声明

文章是基于文章是基于:哔哩哔哩的《北理-Python数据分析与展示-Numpy、Matplotlib、Pandas》视频教程所做的学习笔记,仅为学习使用!!如有侵权,联系删除

目录

0、Matplotlib库

一、pyplot的绘图区域-subplot()

二、pyplot的plot()函数

(一)绘制基础曲线

(二)format_string

1、颜色字符

2、风格字符

3、标记字符

(三)**kwargs

三、pyplot的中文显示

(一)rcParams方法-改变全局字体

1、rcParams的属性

(二)fontproperties属性-局部修改

四、pyplot的文本显示

五、pyplot的子绘图区域

(一)subplot2grid()

(二)GridSpec类配合subplot()

六、pyplot基础图表函数

(一)饼图-plt.pie()

(二)直方图-plt.hist()

(三)极坐标图projection='polar'    


0、Matplotlib库

1、Python优秀的数据可视化第三方库

2、matplotlib.pyplot是绘制各类可视化图形的命令子库,相当于快捷方式。

import matplotlib.pyplot as plt

 3、小测

import matplotlib.pyplot as plt

# 默认列表会作为y轴
plt.plot([3, 1, 4, 5, 2])
# x轴则为列表的索引

plt.ylabel("Grade")# y轴坐标名

# plt.savefig0将输出图形存储为文件,默认PNG格式,可以通过dpi修改输出质量。
# dpi表示每一英寸图片中包含像素点的数量
plt.savefig('test', dpi=600)

plt.show() # 展示图像

        plt.plot(x, y)当有两个以上参数时,按照X轴和Y轴顺序绘制数据点。

# 第一个为x轴
# 第二个为y轴
plt.plot([0, 2, 4, 6, 8], [3, 1, 4, 5, 2])

# 表示尺度:(-1,10)表示x轴最左端为-1,最右端为10;(0,6)表示y轴最小值为0,最大值为6
plt.axis([-1, 10, 0, 6])

一、pyplot的绘图区域-subplot()

plt.subplot(nrows, ncols, plot_number)

(1)用于创建子图的函数,允许用户在一个图形窗口中布局多个绘图区域,特别适用于需要将多个相关的图表展示在同一个窗口中的情况。

(2)在全局绘图区域中创建一个分区体系,并定位到一个子绘图区域

  • nrows: 子图的行数
  • ncols: 子图的列数
  • plot_number: 子图的索引号,从 1 开始,按照从左到右、从上到下的顺序编号。
plt.subplot(3, 2, 4)

二、pyplot的plot()函数

plt.plot(x, y, format_string, **kwargs)

  • x:X轴数据,可以为列表或数组,可选
    • 当绘制一条曲线时,可以省略,只写Y轴数据,这样Y轴数据的索引值会被作为X轴
  • y:Y轴数据,可以为列表或数组
  • format_string:控制曲线的格式字符串,可选
  • **kwargs:第二组或更多(x, y, format_string)

(一)绘制基础曲线

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

a = np.arange(10)
# 绘制4条线,每条线由一组x,y构成
plt.plot(a, a*1.5, a, a*2.5, a, a*3.5, a, a*4.5)
plt.show()

(二)format_string

        控制曲线的格式字符串。分为颜色字符、风格字符和标记字符组成

1、颜色字符

2、风格字符

        决定绘制出的曲线模样

风格字符说明
'-'实线
'--'破折线
'-.'点划线
':'虚线
" "无线条

3、标记字符

标记字符说明
'.'点标记
','像素标记(极小点)
'o'实心圈标记
'v'倒三角标记
'^'上三角标记
'>'右三角标记
'<'左三角标记

import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

a = np.arange(10)
# 绘制4条线,每条线由一组x,y构成
plt.plot(a, a*1.5, 'go-', a, a*2.5, 'rx', a, a*3.5, '*', a, a*4.5, 'b-.')
plt.show()

(三)**kwargs

  • color:控制颜色,color='green'
  • linestyle:线条风格,linestyle='dashed'
  • marker:标记风格,marker='o'
  • markerfacecolor:标记颜色,markerfacecolor='blue'
  • markersize:标记尺寸,markersize=20

三、pyplot的中文显示

(一)rcParams方法-改变全局字体

        改变坐标轴名称以及坐标系的数字刻度

matplotlib.rcParams['font.family'] = 'SimHei'

  • SimHei:黑体
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

matplotlib.rcParams['font.family'] = 'SimHei'
plt.plot([3, 1, 4, 5, 2])
plt.ylabel("纵轴(值)")
plt.show()

1、rcParams的属性

属性说明
font.family用于显示字体的名字
font.style字体风格,正常normal 或 斜体italic
font.size字体大小,整数字号 或者 large、x-small
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

matplotlib.rcParams['font.family'] = 'STSong' # 华文宋体
matplotlib.rcParams['font.size'] = 20

a = np.arange(0.0, 5.0, 0.02)
plt.xlabel("横轴:时间")
plt.ylabel("纵轴:振幅")
plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.show()

(二)fontproperties属性-局部修改

  • 在有中文输出的地方,添加一个属性:fontproperties
  • 只会修改有此属性的中文显示,其余的不会修改
  • 下列代码展示了修改坐标轴名称的字体格式,并未修改坐标系的数字刻度
  • 有效地在特定需要输入中文的地方,确定中文字体和字号
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

a = np.arange(0.0, 5.0, 0.02)

plt.xlabel("横轴:时间", fontproperties='SimHei', fontsize=20)
plt.ylabel("纵轴:振幅", fontproperties='SimHei', fontsize=20)

plt.plot(a, np.cos(2*np.pi*a), 'r--')
plt.show()

四、pyplot的文本显示

函数说明
plt.xlabel()X轴增加文本标签
plt.ylabel()Y轴增加文本标签
plt.title()对图形整体增加文本标签,显示在图形正上方
plt.text()在任意位置增加文本
plt.annotate()在图形中增加带箭头的注解
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=15, color='green')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=15, color='blue')
# 为图像添加标题
plt.title("正弦波实例 y = cos(2πx)", fontproperties='SimHei', fontsize=25)
# 在坐标为(2, 1)的位置添加文本“u = 100”,并设置字体大小
plt.text(2, 1, 'u = 100', fontsize=10)

# 设置 x 轴和 y 轴的范围
plt.axis([-1, 6, -2, 2])
# 图形中加入网格曲线
plt.grid(True)

plt.show()

        plt.annotate() 是 Matplotlib 库中用于在图表上添加注释的函数。通过这个函数,你可以在指定的坐标位置放置文本,并使用箭头指向图表中的特定点或区域

plt.annotate(s, xy=arrow_crd, xytext=text_crd, arrowprops=dict)

  • s: 这是你要添加的注释文本。
  • xy: 这是箭头指向的坐标点,即箭头的头部位置。通常是一个包含两个值的元组,表示 (x, y) 坐标
  • xytext: 这是注释文本的起始位置坐标。它也是一个包含两个值的元组,表示文本框的左下角。
  • arrowprops: 这是一个字典,用于定义箭头的样式属性。你可以在这个字典中设置箭头的颜色、宽度、头部样式等。
    • facecolor:箭头颜色
    • width:箭头宽度
    • shrink:控制从注释文本框(由xytext参数指定)到箭头尾部的点之间的距离。
      • 它并不改变箭头本身的大小或形状,而是调整箭头尾部与文本框之间的空隙
      • shrink参数的值通常介于0和1之间(包括0但不包括1)
      • shrink=0.1,那么箭头尾部与文本框边缘的距离将是文本框尺寸(宽度或高度,取决于箭头的方向)的10%。
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
matplotlib.use('TkAgg')

a = np.arange(0.0, 5.0, 0.02)
plt.plot(a, np.cos(2*np.pi*a), 'r--')

plt.xlabel('横轴:时间', fontproperties='SimHei', fontsize=15, color='green')
plt.ylabel('纵轴:振幅', fontproperties='SimHei', fontsize=15, color='blue')
# 为图像添加标题
plt.title("正弦波实例 y = cos(2πx)", fontproperties='SimHei', fontsize=25)
plt.annotate('u = 100', xy=(2, 1), xytext=(3, 1.5), arrowprops=dict(facecolor='yellow', shrink=0.1, width=2))

# 设置 x 轴和 y 轴的范围
plt.axis([-1, 6, -2, 2])
plt.grid()

plt.show()

 

五、pyplot的子绘图区域

(一)subplot2grid()

        plt.subplot2grid是一个功能强大的函数,用于在更复杂的网格布局中创建子图(subplots)。它允许你指定一个网格,并在这个网格中指定子图的位置和大小。编号从0开始

plt.subplot2grid(GridSpec, CurSpec, colspan=1, rowspan=1)

  • GridSpec:一个表示整个网格的元组,形式为(num_rows, num_cols),指定了网格的行数和列数。
  • CurSpec:一个表示当前子图在网格中位置的元组,形式为(start_row, start_col),或者可以是一个跨度元组(start_row, start_col, num_rows_span, num_cols_span)。如果只指定起始行和列,则默认跨度为1行1列。
  • colspan:可选参数,指定子图应跨越的列数。默认值为1。
  • rowspan:可选参数,指定子图应跨越的行数。默认值为1。
import matplotlib.pyplot as plt  
  
# 创建一个3x3的网格,并在(0, 0)位置创建一个2x2的子图  
plt.subplot2grid((3, 3), (0, 0), colspan=2, rowspan=2)  
# 这将创建一个从网格的左上角开始,跨越2行2列的子图
# 分成3X3的网格,选中其中第(0,0)块区域,跨列3列,即ax1
plt.subplot2grid((3, 3), (0, 0), colspan=3)
# 继续编写绘制图形代码

# 分成3X3的网格,选中其中第(1,0)块区域,跨列2列,即ax2
plt.subplot2grid((3, 3), (1, 0), colspan=2)
# 继续编写绘制图形代码

# 分成3X3的网格,选中其中第(1,2)块区域,跨行2行,即ax3
plt.subplot2grid((3, 3), (1, 2), rowspan=2)
# 继续编写绘制图形代码

# 分成3X3的网格,选中其中第(2,0)块区域,即ax4
plt.subplot2grid((3, 3), (2, 0))
# 继续编写绘制图形代码

# 分成3X3的网格,选中其中第(2,1)块区域,即ax5
plt.subplot2grid((3, 3), (2, 1), colspan=3)
# 继续编写绘制图形代码

(二)GridSpec类配合subplot()

        每一次使用subplot2grid都需要重新对图形的设计进行约束,每次都要(3,3)。

        GridSpec类是Matplotlib库中的一个工具,用于创建更复杂的子图布局。它提供了一种灵活的方式来定义网格的几何形状,使得你可以轻松地在网格上放置子图。GridSpec类通常与plt.subplot或Figure对象的add_subplot方法结合使用。

import matplotlib.gridspec as gridspec

# 设定区域划分为3x3的网格
gs = gridspec.GridSpec(3, 3)

# 选择第0行元素,选择行中的所有列元素
ax1 = plt.subplot(gs[0, :])

# 选择第1行元素,选择从开始,到最后一个元素-1个列元素,也就是倒数第二个列元素
# 序列的切片操作,a[:-1]表示从开始一直到最后一个元素之前
ax2 = plt.subplot(gs[1, :-1])

# 选择从第1行开始到结束行元素,选择最后一个列元素
# 序列的索引操作,a[-1]表示最后一个元素
ax3 = plt.subplot(gs[1:, -1])

# 选择第2行元素,选择第0个列元素
ax4 = plt.subplot(gs[2, 0])

# 选择第2行元素,选择第1个列元素
ax5 = plt.subplot(gs[2, 1])

六、pyplot基础图表函数

(一)饼图-plt.pie()

import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')

# 用于设置饼图中每个扇区的标签
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
# 指定了饼图中每个扇区的大小
sizes = [15, 30, 45, 10]
# 用于设置饼图中每个扇区离饼图中心的距离
explode = (0, 0.1, 0, 0)

# autopct表示在图中显示百分数的格式,'%1.1f%%' 表示将百分比格式化为带有一个小数点的浮点数
# shadow: 这是一个布尔值,用于设置是否在饼图下方绘制阴影,以产生立体效果。
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90)

plt.show()

(二)直方图-plt.hist()

        看到数据在取值方面的分布

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')

# 设置随机数生成器的种子为10。这确保了每次运行代码时生成的随机数序列是相同的
np.random.seed(10)
# 设置正态分布的均值(mu)为100,标准差(sigma)为20
mu, sigma = 100, 20
# 生成一个大小为100的正态分布随机样本
a = np.random.normal(mu, sigma, size=100)

# a: 要绘制直方图的数据
# 10: 直方图的柱子数量。这里选择了10个柱子。最小值和最大值之间构成了一个取值范围,在取值范围之内均等的划分10个区间
# 每一个柱子中包含多少元素,就构成了高度
# histtype='stepfilled': 直方图的类型。'stepfilled' 表示柱子是有填充的
# alpha=0.75: 填充颜色的透明度。0.75 表示相对不透明。
plt.hist(a, 10, histtype='stepfilled', facecolor='b', alpha=0.75)

# 设置图的标题
plt.title('Histogram')

plt.show()

        修改其中柱子的个数为50个:

(三)极坐标图projection='polar'    

         中心点是原点,按照0° ~ 360°绘制坐标

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
matplotlib.use('TkAgg')

# 绘制的扇形数量
N = 20
# 使用np.linspace生成从0到(2*pi,即360°)的等距的N个值(不包括(2*pi)),这些值代表每个扇形在极坐标上的起始角度。
theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
# 随机生成N个在0到10之间的值,代表每个扇形的半径
radii = 10 * np.random.rand(N)
# 生成扇形的宽度(角度跨度)
width = np.pi / 4 * np.random.rand(N)

# 面向对象方法绘制坐标图
# ax是一个对象
# 其中111意味着1x1网格上的第1个子图,而projection='polar'表示这是一个极坐标图。
ax = plt.subplot(111, projection='polar')
# 在极坐标图上绘制条形图。其中theta是条形的角度,radii是条形的半径,width是条形的宽度,而bottom=0.0表示条形从极坐标的原点开始。
bars = ax.bar(theta, radii, width=width, bottom=0.0)

# 根据其半径值r来设置其颜色。颜色是基于viridis色图来确定的,而透明度被设置为0.5
for r,bar in zip(radii, bars):
    bar.set_facecolor(plt.cm.viridis(r / 10.))
    bar.set_alpha(0.5)

plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Star_KeyW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值