目录
- python数据可视化--matplotlib库
- 0、前言
- 1、饼图
- 2、直方图
- 3、折线图
- 4、散点图
- 5、柱状图
- 6、箱线图
- 7、极坐标图
- 8、步阶图
- 9、谱图
- 10、功率密度图
- 11、相干谱图
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 计算模式,可选的有psd
和magnitude
(默认为psd
)。scale
: 频谱尺度,可选的有linear
和dB
(默认为dB
)。cmap
: 画谱图所使用的颜色表(默认为None
)。xextent
: 谱图 X 轴方向上的范围(默认为None
)。extent
: 谱图 X、Y 轴方向上的范围(默认为None
)。vmin
: 谱图颜色表的最小值(默认为None
)。vmax
: 谱图颜色表的最大值(默认为None
)。**kwargs
: 其他参数,包括label
、alpha
、linestyle
等。
代码示例
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()