在进行数据分析的过程中,正所谓“一图胜千言”,一张布局合理、色彩精美的图片不仅可以帮助我们理解和解释数据,还更好地传达信息和故事,所以数据可视化的重要性不言而喻。
在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
相关函数
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()
通过传递要绘制的数据,它会自动计算并绘制数据的分布情况 。
相关函数
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)
常用参数详解
代码示例
# 创建数据
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()
相关函数
matplotlib.pyplot.plot(*args, scalex=True, scaley=True,
data=None, **kwargs)
常用参数详解
代码示例
# 创建数据
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()
相关函数
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)
常用参数详解
代码示例
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()
相关函数
#垂直条形图
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 = [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()
相关函数
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)
常用参数详解
代码示例
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()
相关函数
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()
相关函数
matplotlib.pyplot.step(x, y, *args, where='pre',
data=None, **kwargs)
常用参数详解
代码示例
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()
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()
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)
常用参数详解
代码示例
代码将绘制两个频率为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()
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)
常用参数详解
代码示例
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()