欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

matplotlib 绘图示例 - 阻尼衰减曲线、XRD 数据绘图、三角函数绘图、超越函数绘图、正态分布随机数(内插多项式)

最编程 2024-04-22 10:22:22
...

matplotlib作图示例——阻尼衰减曲线、XRD数据绘图、三角函数绘图、超越函数绘图、正态分布随机数(插值多项式)、饼图

源码地址: handle_matplotlib_pic
代码只在mpl_pic.py中、XRD数据是XRD_AFO.csv

方便的话,帮忙点个star~

1.阻尼衰减曲线

注意点

  • 线条样式和颜色
# plot()函数里面的参数 分别代表 颜色为蓝色,线宽1,线类型为隔断的线条- -(正常线条为-)
color='blue', linewidth=1, linestyle="--"
  • 右上角图例的制作
    图例中包含希腊字母更详细的信息参考希腊字母写法
# 图例描述文字 plot()函数里面的label参数,$$符号之间标明有特殊的表达方式
# _下划线是注脚样式的字符(小一号的字符,德尔塔在字母p的左下角)、\delta是小写希腊字母德尔塔的表示方式
label=r"exp$_\delta$ecay"
# $x^{2}$代表x的平方,幂次数2在x的右上角
label="cos($x^{2}$)"
# 图例位置 上 右
plt.legend(loc='upper right')
  • 横纵左表和标题的添加
# 标题 横纵轴描述
plt.title(u"阻尼衰减曲线")
plt.xlabel("时间(s)")
plt.ylabel("幅度(mV)")
  • 阴影的绘制
# 阴影区
# 定义横轴范围0.8到3 
a,b = 0.8, 3
xf = t1[np.where((t1 > a) & (t1 < b))]
plt.fill_between(xf, f(xf), alpha=0.25)		# 填充
# plt.fill_between(xf,f(xf),f2(xf), alpha=0.25) # 自定义阴影区

在这里插入图片描述

2.XRD数据绘图

本来蛮简单的,被我想复杂了,emm浪费了一些时间,详情见源码
在这里插入图片描述

3.正弦、余弦、正切图案及画布布局方式

注意点

  • 标注的画法——Matplotlib 中文用户指南 4.5 标注
    效果图如下,这种是gs = gridspec.GridSpec(2, 2)将绘图区分成两行两列的方式
    在这里插入图片描述

这种方式比较固定,子图之间不能覆盖,死板一些plt.subplot(221)代表2×2画布第一块,可以看到第三块的位置是空白,所以采取第一种方式,仓库没保留第二种代码,放在这里

''' @Author: randolph @Date: 2020-06-11 22:47:59 @LastEditors: randolph @LastEditTime: 2020-06-12 00:58:02 @version: 1.0 @Contact: cyg0504@outlook.com @Descripttion: 第二种绘图方法 https://blog.****.net/wizardforcel/article/details/54782628 '''
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用于正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False   # 用来正常显示负号
x = np.arange(0, 100)

# 获取x坐标
X = np.linspace(-np.pi, np.pi, 256, endpoint=True)
# 获取y坐标
sin, cos = np.sin(X), np.cos(X)

# 子图1 绘制正弦曲线
plt.subplot(221)
plt.plot(X, sin, "b-", lw=2.5, label="正弦")
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.set_title('正弦曲线')
plt.xticks([-np.pi, -np.pi * 2 / 3, -np.pi / 3, np.pi / 3, np.pi * 2 / 3, np.pi],
           [r'-$\pi$', r'-$2\pi/3$', r'-$\pi/3$', r'$\pi/3$', r'$2\pi/3$', r'$\pi$'])
t = np.pi / 6  # 设定点x轴值
plt.scatter([t, ], [np.sin(t), ], 30, color='r')
plt.annotate(r'$\sin(\frac{\pi}{6})=\frac{1}{2}$',
             xy=(t, np.sin(t)),     # 点的位置
             xycoords='data',       # 注释文字的偏移量
             xytext=(50, 50),       # 文字离点的横纵距离
             textcoords='offset points',
             fontsize=13,  # 注释的大小
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.5"))       # 箭头指向的弯曲度
plt.plot([t, 0], [0.5, 0.5], color='r', linewidth=1, linestyle=":")                 # 作y轴垂线(t, 0.5)(0, 0.5)
plt.plot([t, t], [0.5, 0], color='r', linewidth=1, linestyle=":")                   # 作y轴垂线(t, 0.5)(t, 0)
plt.legend(loc='upper left')

# 子图2 不画
# plt.subplot(222)
# plt.plot(x, -x)

# 子图3 绘制余弦曲线
plt.subplot(223)
plt.plot(X, cos, "r-", lw=2.5, label="余弦")
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.set_title('余弦曲线')
plt.xticks([-np.pi, -np.pi * 2 / 3, -np.pi / 3, np.pi / 3, np.pi * 2 / 3, np.pi],
           [r'-$\pi$', r'-$2\pi/3$', r'-$\pi/3$', r'$\pi/3$', r'$2\pi/3$', r'$\pi$'])
t = np.pi / 3  # 设定点x轴值
plt.scatter([t, ], [np.cos(t), ], 30, color='b')
plt.annotate(r'$\cos(\frac{\pi}{3})=\frac{1}{2}$',
             xy=(t, np.cos(t)),     # 点的位置
             xycoords='data',       # 注释文字的偏移量
             xytext=(25, 25),       # 文字离点的横纵距离
             textcoords='offset points',
             fontsize=13,           # 注释的大小
             arrowprops=dict(arrowstyle="->", connectionstyle="arc3,rad=.3"))       # 箭头指向的弯曲度
plt.plot([t, 0], [0.5, 0.5], color='b', linewidth=1, linestyle=":")                 # 作y轴垂线(t, 0.5)(0, 0.5)
plt.plot([t, t], [0.5, 0], color='b', linewidth=1, linestyle=":")                   # 作y轴垂线(t, 0.5)(t, 0)
plt.legend(loc='upper left')

# 子图4 绘制正切曲线
plt.subplot(224)
plt.plot(X, np.tan(X), "g", lw=2.5, label="正切")
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data', 0))
ax.set_title('正切曲线')
plt.xticks([-np.pi, -np.pi * 2 / 3, -np.pi / 3, np.pi / 3, np.pi * 2 / 3, np.pi],
           [r'-$\pi$', r'-$2\pi/3$', r'-$\pi/3$', r'$\pi/3$', r'$2\pi/3$', r'$\pi$'])
plt.legend(loc='upper left')

plt.show()

4.超越函数绘图

超越函数为cos(num_list) + x**4 + x**3 + 198 + e**3 - log(x+1)
num_list为np.linspace()生成的数组
在这里插入图片描述

5.正态分布随机数、插值多项式

np.random.normal()生成正态分布的数,用 quadratic 插值(2阶B样条曲线插值)或者 cubic插值获得的结果都是一致的
在这里插入图片描述

6.饼图

源码

def pic_4():
    '''图四 饼图 用了apply方法将df数据某一列元素转换成浮点数 '''
    def convert2int(d: str) -> float:
        # print(d)
        return float(d.split(' ')[0].split('$')[1])

    import pandas as pd
    ROOT_PATH = os.path.dirname(os.path.abspath(__file__))
    src_file = os.path.join(ROOT_PATH, "2012-19sport.csv")           # 绝对路径拼接
    file = pd.read_csv(src_file)
    df = pd.DataFrame(file)
    df_2013 = df[df['Year'] == 2013]      # 选取Year列为2013的数据
    # 将 Endorsements 列处理成浮点数
    df_2013['Endorsements'] = df_2013['Endorsements'].apply(lambda x: convert2int(x))
    endorsements = df_2013.groupby(by='Sport')['Endorsements'].sum()

    names = endorsements.index.to_list()
    # explode = [x / sum(endorsements) for x in endorsements]
    plt.pie(x=endorsements.to_list(), labels=names, startangle=60, autopct='%1.1f%%')  # explode=explode,
    plt.title('2013年球类收入饼图')
    plt.show()

在这里插入图片描述