python数据可视化--matplotlib库

python数据可视化–matplotlib库

0、前言

在进行数据分析的过程中,正所谓“一图胜千言”,一张布局合理、色彩精美的图片不仅可以帮助我们理解和解释数据,还更好地传达信息和故事,所以数据可视化的重要性不言而喻。

在python中,常用的数据可视化库有matplotlib库与seaborn库,在这里主要介绍matplotlib库的相关图像绘制函数。

官方文档:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.scatter.html

在使用前,进行导入库与设置相关显示参数。

import matplotlib.pyplot as plt

# 解决中文显示与负号显示
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
# 画布大小与清晰度
plt.rcParams['figure.figsize'] = [8, 6]
plt.rcParams['figure.dpi'] = 300

1、饼图

相关函数

matplotlib.pyplot.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, hatch=None, data=None)[source]

常用参数详解

  • x: 饼图划分的数值数据
  • labels: 饼图每个部分对应的标签文本
  • colors: 饼图每个部分的颜色
  • autopct: 控制每个饼块内部文本的格式化方式,例如 ‘%1.1f%%’
  • explode: 饼图中每个部分距离圆心的偏移量,以列表形式提供
  • shadow: 是否显示阴影效果
  • startangle: 起始角度,可以设置旋转的起点,默认是0度
  • radius: 饼图的半径大小

代码示例

# 创建数据
x = [46, 57]

# 绘制直方图
plt.pie(x, explode=[0.1, 0], colors=['skyblue', 'orange'],
        labels=['标签1', '标签2'], shadow=True,
        autopct='%1.1f%%', radius=0.8)
plt.legend()
plt.title('饼图')
plt.tight_layout()
# plt.savefig('pie.png')

# 显示图形
plt.show()

在这里插入图片描述

2、直方图

通过传递要绘制的数据,它会自动计算并绘制数据的分布情况 。

相关函数

matplotlib.pyplot.hist(x, bins=None, range=None, density=False, 
weights=None, cumulative=False, bottom=None, histtype='bar', 
align='mid', orientation='vertical', rwidth=None, log=False, 
color=None, label=None, stacked=False, *, data=None, **kwargs)

常用参数详解

  • x:输入数据;
  • bins:直方图的柱子数目;
  • range:x轴的范围,元组形式;
  • density:是否将直方图归一化;
  • cumulative:是否需要计算累计分布;
  • histtype:直方图类型,可选’bar’, ‘barstacked’, ‘step’, ‘stepfilled’;
  • color:柱子颜色;
  • alpha:透明度;
  • label:标签;
  • orientation:柱子方向,可选’horizontal’ 或 ‘vertical’;
  • edgecolor:边框颜色;
  • linewidth:边框宽度。

代码示例

# 创建数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]

# 绘制直方图
plt.hist(data, density=False, alpha=1)
plt.xlabel('x')
plt.ylabel('count')
plt.title('直方图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('hist.png')

# 显示图形
plt.show()

在这里插入图片描述

3、折线图

相关函数

matplotlib.pyplot.plot(*args, scalex=True, scaley=True,
 data=None, **kwargs)

常用参数详解

  • x:横坐标数据
  • y:纵坐标数据
  • color:线条颜色(默认为蓝色)
  • linestyle:线条风格(默认为实线)
  • linewidth:线条宽度(默认为1)
  • marker:数据点样式(默认无)
  • markersize:数据点大小(默认为6)
  • label:标签,用于区分不同的数据系列
  • xlabel:横坐标标签
  • ylabel:纵坐标标签
  • title:图表标题
  • xlim:横坐标范围
  • ylim:纵坐标范围
  • legend:是否显示图例(默认为False)

代码示例

# 创建数据
data = [1, 2, 2, 3, 3, 3, 4, 4, 5]

# 绘制折线图
plt.plot(data, color='red', linestyle='-',
         linewidth=1.2,marker='o',label='data')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('折线图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('plot.png')

# 显示图形
plt.show()

在这里插入图片描述

4、散点图

相关函数

matplotlib.pyplot.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: 标量或数组,表示散点大小
  • c: 颜色或颜色序列,可以指定散点颜色。默认为蓝色(b)
  • marker: 表示散点形状的标记,默认为圆圈(o)
  • alpha: 表示透明度,取值范围为[0, 1],默认为1,即不透明
  • cmap: 颜色映射,如果c指定了颜色序列,那么可以使用该参数将这些颜色映射到一个连续的色带上

代码示例

import numpy as np
# 创建数据
x1 = np.random.random(size=50)
y1 = np.random.random(size=50)
x2 = np.random.random(size=50)
y2 = np.random.random(size=50)

# 绘制散点图
plt.scatter(x1, y1, label='type1', alpha=0.8, c='orange')
plt.scatter(x2, y2, label='type2', alpha=1, c='skyblue')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('散点图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('scatter.png')

# 显示图形
plt.show()

在这里插入图片描述

5、柱状图

相关函数

#垂直条形图
matplotlib.pyplot.bar(x, height, width=0.8, bottom=None, 
*, align='center', data=None, **kwargs)
#水平条形图
matplotlib.pyplot.barh(y, width, height=0.8, left=None,
 *, align='center', data=None, **kwargs)

常用参数详解

  • x: 每个柱子的横坐标值
  • height: 每个柱子的高度
  • width: 每个柱子的宽度(默认为0.8)
  • bottom: 每个柱子底部的位置(默认为0)
  • align: 柱子对齐方式,可选项包括’center’、‘edge’(默认为’center’)
  • color: 柱子颜色,可以是字符串、RGB元组或RGBA元组
  • edgecolor: 柱子边界线颜色
  • linewidth: 柱子边界线宽度

代码示例

# 创建数据
x = [1, 2, 3, 4, 5, 6]
y = [4, 4, 5, 9, 2, 3]

# 绘制柱状图
plt.subplot(1, 2, 1)
plt.bar(x, height=y, width=0.8, bottom=0, label='vertical', align='center', color='orange')
plt.legend()
plt.xlabel('x')
plt.ylabel('y')
plt.title('垂直柱状图')
plt.grid(True)

plt.subplot(1, 2, 2)
plt.barh(x, width=y, height=0.6, left=0, label='horizon', align='center', color='red')
plt.legend()
plt.xlabel('y')
plt.ylabel('x')
plt.title('水平柱状图')
plt.grid(True)

# plt.tight_layout()
# plt.savefig('bar.png')

# 显示图形
plt.show()

在这里插入图片描述

6、箱线图

相关函数

matplotlib.pyplot..boxplot(x, notch=None, sym=None, 
vert=None, whis=None, positions=None, widths=None, 
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)

常用参数详解

  • x:指定要绘制箱线图的数据;
  • notch:是否是凹口的形式展现箱线图,默认非凹口;
  • sym:指定异常点的形状,默认为’o’号显示;
  • vert:是否需要将箱线图垂直摆放,默认垂直摆放;
  • whis:指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
  • positions:指定箱线图的位置,默认为[0,1,2…];
  • widths:指定箱线图的宽度,默认为0.5;
  • patch_artist:是否填充箱体的颜色;
  • meanline:是否用线的形式表示均值,默认用点来表示;
  • showmeans:是否显示均值,默认不显示;
  • showcaps:是否显示箱线图顶端和末端的两条线,默认显示;
  • showbox:是否显示箱线图的箱体,默认显示;
  • showfliers:是否显示异常值,默认显示;
  • boxprops:设置箱体的属性,如边框色,填充色等;
    • boxprops = {‘color’:‘g’, ‘facecolor’:‘yellow’}
    • ‘color’ : ‘g’ 箱子外框的颜色
    • ‘facecolor’ : ‘yellow’ 箱子填充的颜色
  • labels:为箱线图添加标签,类似于图例的作用;
  • flierprops:设置异常值的属性,如异常点的形状、大小、填充色等;
  • medianprops:设置中位数的属性,如线的类型、粗细等;
  • meanprops:设置均值的属性,如点的大小、颜色等;
  • capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;
  • whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

代码示例

import numpy as np

# 创建数据
# 利用 numpy库生成三组正态分布随机数
x = [np.random.normal(0, std, 100) for std in range(1, 4)]

# 绘制箱线图
plt.boxplot(x,
            patch_artist=True, sym='o',
            labels=['一组', '二组', '三组'],
            showmeans=True,
            boxprops={
    
    'color': 'black', 'facecolor': '#9999ff'},
            flierprops={
    
    'marker': 'o', 'markerfacecolor': 'red', 'color': 'black'},
            meanprops={
    
    'marker': 'D', 'markerfacecolor': 'indianred', 'color': 'y', },
            medianprops={
    
    'linestyle': '--', 'color': 'orange'})
plt.xlabel('x')
plt.ylabel('y')
plt.title('箱线图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('boxplot.png')

# 显示图形
plt.show()

在这里插入图片描述

7、极坐标图

相关函数

matplotlib.pyplot.polar(theta, r, *args, **kwargs)

常用参数详解

  • theta:极角数据序列,以弧度表示。
  • r:极径序列,即半径序列(长度与theta相等)。
  • *args: 可变数量的位置参数。这些参数通常包括颜色(color)、线型(linestyle)、线宽(linewidth)等等。
  • **kwargs: 关键字参数。这些参数支持标签(label)、透明度(alpha)、可见性(visible)等属性控制。

代码示例

import numpy as np
# 创建数据
# 构建极角和极径数据序列
theta = np.linspace(0, 2 * np.pi, 8, endpoint=False)
r = 10 * np.random.rand(len(theta))

# 绘制极坐标图
plt.polar(theta, r, color='black')
plt.title('极坐标图')
# plt.tight_layout()
# plt.savefig('polar.png')

# 显示图形
plt.show()

在这里插入图片描述

8、步阶图

相关函数

matplotlib.pyplot.step(x, y, *args, where='pre', 
data=None, **kwargs)

常用参数详解

  • x: array_like,表示x轴上的值
  • y: array_like,表示y轴上的值
  • where: {‘pre’, ‘post’, ‘mid’},表示折线在x轴和y轴交点处是从前面还是从后面开始绘制。默认为’pre’
  • data: DataFrame, Series, or array_like, 可选参数,如果指定了data则可以直接使用DataFrame或Series中的列名作为其他参数的变量名
  • label: str, 可选参数,用于标注线条的名称
  • color: 可以是单个颜色(例如’red’),也可以是颜色列表。如果指定了多个颜色,则会对每个线条依次循环使用这些颜色
  • linestyle: {‘-’, ‘–’, ‘-.’, ‘:’, ‘’, (offset, on-off-seq), …},可选参数,指定线条的样式
  • linewidth: float, 可选参数,指定线条宽度
  • alpha: float, 可选参数,指定线条透明度

代码示例

import numpy as np
# 生成数据
x = np.arange(0, 5, 0.1)
y = np.sin(x)

# 绘制步阶图
fig, ax = plt.subplots()
ax.step(x, y, label='sin', color='r', linestyle='-')

# 添加标签和标题
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_title('步阶图')
plt.legend()
plt.grid(True)
# plt.tight_layout()
# plt.savefig('step.png')

# 显示图形
plt.show()

在这里插入图片描述

9、谱图

plt.specgram函数用于绘制频谱图,它将一段音频信号分成小的时间窗口,并在每个时间窗口内计算其频谱。该函数通常用于音频信号处理和分析中。

相关函数

matplotlib.pyplot.specgram(x, NFFT=None, Fs=None, Fc=None, 
detrend=None, window=None, noverlap=None, cmap=None, xextent=None, 
pad_to=None, sides=None, scale_by_freq=None, mode=None, scale=None, 
vmin=None, vmax=None, *, data=None, **kwargs)[source]

常用参数详解

  • x: 一维数组,表示音频信号。
  • Fs: 音频采样率(Hz)。
  • NFFT: FFT 点数(默认为 256),决定了频谱的分辨率。
  • noverlap: 每个时段之间重叠样本数(默认为 None,即 NFFT//8)。
  • detrend: 单调性去除方式,默认为 None
  • window: 指定窗口函数(默认为汉宁窗)。
  • mode: FFT 计算模式,可选的有 psdmagnitude(默认为 psd)。
  • scale: 频谱尺度,可选的有 lineardB(默认为 dB)。
  • cmap: 画谱图所使用的颜色表(默认为 None)。
  • xextent: 谱图 X 轴方向上的范围(默认为 None)。
  • extent: 谱图 X、Y 轴方向上的范围(默认为 None)。
  • vmin: 谱图颜色表的最小值(默认为 None)。
  • vmax: 谱图颜色表的最大值(默认为 None)。
  • **kwargs: 其他参数,包括 labelalphalinestyle 等。

代码示例

import numpy as np
# 生成数据
x = np.random.randn(3000)

# 绘制时频图
plt.specgram(x, NFFT=200, Fs=100, noverlap=100)

plt.ylabel('Frequency [Hz]')
plt.xlabel('x')
plt.title('时频图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('specgram.png')

# 显示图形
plt.show()

10、功率密度图

plt.psd()用于计算并绘制信号的功率谱密度(Power Spectral Density, PSD)。它返回频率和对应的功率谱密度值,并可以将其用于绘制 PSD 图表以可视化信号的频谱信息。

相关函数

matplotlib.pyplot.psd(x, NFFT=None, Fs=None, Fc=None, detrend=None,
 window=None, noverlap=None, pad_to=None, sides=None, 
 scale_by_freq=None, return_line=None, *, data=None, **kwargs)

常用参数详解

  • x:一个一维数组,表示信号样本数据
  • NFFT:FFT窗口大小,通常为2的幂次方。如果未指定,则默认使用256。
  • Fs:采样频率,单位为Hz。如果未指定,则默认为2π。
  • detrend:指定是否需要去趋势。可选值为’linear’、False或True。当为’linear’时,表示线性去趋势;当为False时,表示不去趋势;当为True时,表示使用默认方法去趋势。
  • window:窗口函数类型。可选值包括’hanning’、‘hamming’、‘bartlett’、‘blackman’和None。如果未指定,则默认使用’hanning’。
  • noverlap:重叠的样本数。如果未指定,则默认为0。
  • pad_to:FFT计算后的输出长度。如果未指定,则默认为NFFT。
  • sides:指定输出结果是否返回单边谱(默认为True)或双边谱(False)。
  • scale_by_freq:指定是否将每个频率段的值除以在该频率段内的FFT点数(默认为True)或者将整个FFT结果乘以比例因子。
  • return_line:是否返回一个Line2D对象(默认为True)。
  • kwargs:其他可选关键字参数,例如颜色、线型、标签等。

代码示例

代码将绘制两个频率为10 Hz和20 Hz的正弦波的和的功率谱密度图。 plt.psd() 函数的第一个参数是信号,第二个参数是采样频率(这里使用1/Δt 来计算)。该函数还有其他可选参数,可用于设置窗口类型、重叠量等。

import numpy as np
# 生成信号数据
N = 1024  # 采样点数
dt = 0.01  # 采样时间间隔
t = np.arange(0, N*dt, dt)  # 时间数组
f1 = 10  # 信号频率1
f2 = 20  # 信号频率2
s1 = np.sin(2*np.pi*f1*t)  # 信号1
s2 = np.sin(2*np.pi*f2*t)  # 信号2
s = s1 + s2  # 信号和

# 绘制功率谱密度图
plt.psd(s, Fs=1/dt)
plt.xlim([0, 50])  # x轴范围限制
plt.xlabel('Frequency (Hz)')  # x轴标签
plt.ylabel('Power Spectral Density')  # y轴标签
plt.title('功率谱密度图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('psd.png')

# 显示图形
plt.show()

在这里插入图片描述

11、相干谱图

plt.cohere函数是用于计算并绘制两个信号的相干谱(coherence spectrum)。

相关函数

matplotlib.pyplot.cohere(x, y, NFFT=256, Fs=2, Fc=0, 
detrend=<function detrend_none>, window=<function window_hanning>, 
noverlap=0, pad_to=None, sides='default', scale_by_freq=None,
 *, data=None, **kwargs)

常用参数详解

  • x, y:输入的两个信号。
  • fs:采样频率。
  • NFFT:FFT窗口大小。
  • detrend:指定去趋势的方法,可选值为’mean’、'linear’和False。
  • noverlap:FFT窗口的重叠部分长度,通常取NFFT*0.5。
  • cmap:色图名称。
  • vmax:颜色映射的最大值。
  • vmin:颜色映射的最小值。
  • sides:指定是否只绘制单侧相干谱,可选值为’onesided’和’twosided’。
  • scale_by_freq:指定是否按频率缩放相干谱,可选值为True和False。
  • xlabel, ylabel:x轴和y轴标签。
  • title:图表标题。

代码示例

import numpy as np
# 生成两个信号
fs = 1000
t = np.arange(0, 10, 1/fs)
x1 = np.sin(2*np.pi*50*t)
x2 = np.sin(2*np.pi*120*t)

# 计算并绘制相干图
f, Cxy = plt.cohere(x1, x2, fs)
plt.xlabel('frequency [Hz]')
plt.ylabel('Coherence')
plt.title('相干图')
plt.grid(True)
# plt.tight_layout()
# plt.savefig('cohere.png')

# 显示图形
plt.show()

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_49588575/article/details/131046727