源码地址: handle_matplotlib_pic
代码只在mpl_pic.py
中、XRD数据是XRD_AFO.csv
方便的话,帮忙点个star~
注意点
# 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) # 自定义阴影区
本来蛮简单的,被我想复杂了,emm浪费了一些时间,详情见源码
注意点
这种方式比较固定,子图之间不能覆盖,死板一些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: [email protected]
@Descripttion: 第二种绘图方法
https://blog.csdn.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()
超越函数为cos(num_list) + x**4 + x**3 + 198 + e**3 - log(x+1)
num_list为np.linspace()生成的数组
np.random.normal()
生成正态分布的数,用 quadratic
插值(2阶B样条曲线插值)或者 cubic
插值获得的结果都是一致的
源码
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()