Python绘制茎叶图:plt.stem

文章目录

简介

茎叶图从外观来看,更像是火柴,由基线、茎线、茎头三部分构成。最简单的示例如下

import numpy as np
import matplotlib.pyplot as plt
plt.stem(np.sin(np.arange(10)))
plt.show()

在这里插入图片描述

参数

stem的完整参数如下

stem([locs,] heads, linefmt=None, markerfmt=None, basefmt=None, bottom=0, label=None, orientation='vertical', data=None)

其中

  • locs和heads表示其 x , y x,y x,y方向的值。如果只输入一组数值,则默认输入的是heads。
  • linefmt, markerfmt, basefmt 均为字符串,分别用于定义茎线、茎头以及基线的格式。
  • orientation 表示茎叶图方向,默认为’vertical’,若取值为’horizontal’,则茎叶图调转90°
  • bottom 为基线的位置
  • label 为图例中使用的标签

linefmt和basefmt字符串由两部分组成,分别用于设置茎线的颜色和类型,第一部分格式为Cx,表示色环中第x种颜色;第二部分可选’-', ‘–’, ‘-.’, ‘:’,表示线的虚实类型。当然,第一部分直接采取颜色缩写,比如r,g,b也是可以的。

markerfmt也是同样的格式,但用于调整茎头标记点的字符与线型有所差异。其具体可选值存放在Line2D中

from matplotlib.lines import Line2D
 from pprint import pprint
 pprint(Line2D.markers)

打印结果是一个字典,列表如下

0‘tickleft’1‘tickright’2‘tickup’
3‘tickdown’4‘caretleft’5‘caretright’
6‘caretup’7‘caretdown’8‘caretleftbase’
9‘caretrightbase’10‘caretupbase’11‘caretdownbase’
‘’‘nothing’’ ’‘nothing’‘*’‘star’
‘+’‘plus’‘,’‘pixel’‘.’‘point’
‘1’‘tri_down’‘2’‘tri_up’‘3’‘tri_left’
‘4’‘tri_right’‘8’‘octagon’‘<’‘triangle_left’
‘>’‘triangle_right’‘D’‘diamond’‘H’‘hexagon2’
None’‘nothing’‘P’‘plus_filled’‘X’‘x_filled’
‘^’‘triangle_up’‘_’‘hline’‘d’‘thin_diamond’
‘h’‘hexagon1’‘none’‘nothing’‘o’‘circle’
‘p’‘pentagon’‘s’‘square’‘v’‘triangle_down’
‘x’‘x’‘vline’

演示

下面演示一下不同格式的效果

lf = ['C0-', 'C1--', 'C2-.', 'C3:']
mf = ['C40', 'r*', 'g8', 'bD']

xs = np.sin(np.arange(10))

fig = plt.figure()
for i in range(4):
    ax = fig.add_subplot(2,2,i+1)
    ax.stem(xs, linefmt=lf[i], markerfmt=mf[i])
    plt.title(f"linefmt={lf[i]}, markerfmt={mf[i]}")

plt.show()

效果如下

在这里插入图片描述

Python中,可以使用NumPy库来实现离散傅里叶变换(DFT),并可视化时域波形图和幅频谱图。以下是实现这一过程的基本步骤和代码示例: 1. 首先,确保你已经安装了NumPy和Matplotlib库。如果还没有安装,可以使用pip安装: ``` pip install numpy matplotlib ``` 2. 导入必要的库并创建时域信号: ```python import numpy as np import matplotlib.pyplot as plt # 创建一个时域信号,例如一个简单的正弦波 fs = 1000 # 采样频率 t = np.arange(0, 1, 1/fs) # 生成一个时间向量 freq = 5 # 正弦波频率 signal = np.sin(2 * np.pi * freq * t) # 生成正弦波信号 ``` 3. 计算信号的离散傅里叶变换(DFT): ```python yf = np.fft.fft(signal) # 对信号进行DFT变换 xf = np.fft.fftfreq(len(signal), 1/fs) # 计算频率 ``` 4. 获取振幅谱并绘图: ```python # 取DFT结果的绝对值,即振幅谱,并取其一半(因为DFT结果是对称的) amplitude_spectrum = np.abs(yf)[:len(signal)//2] plt.figure(figsize=(12, 6)) # 绘制时域波形图 plt.subplot(2, 1, 1) plt.plot(t, signal) plt.title('Time Domain Signal') plt.xlabel('Time [s]') plt.ylabel('Amplitude') # 绘制幅频谱图 plt.subplot(2, 1, 2) plt.stem(xf[:len(signal)//2], amplitude_spectrum) plt.title('Amplitude Spectrum') plt.xlabel('Frequency [Hz]') plt.ylabel('Amplitude') plt.tight_layout() plt.show() ``` 这段代码首先创建了一个简单的正弦波信号,然后使用`np.fft.fft`计算其DFT变换,接着绘制了时域波形图和幅频谱图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

微小冷

请我喝杯咖啡

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

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

打赏作者

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

抵扣说明:

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

余额充值