绘制四维数据散点图
原理
- 将自变量
x
1
\ x_1
x1,
x
2
\ x_2
x2和
x
3
\ x_3
x3分别赋给
x
\ x
x,
y
\ y
y和
z
\ z
z轴。
因变量以颜色进行表示。 - 这时需要给定因变量数据组以某一颜色映射成色谱值。
公式
以电化学中的旋转圆盘电极体系下界面浓度分布为例。
C 0 ( y ) = [ C 0 ∗ 0.8934 ] ∫ 0 Y e x p ( − u 3 ) d u \ C_0(y) = [\dfrac{C_0^*}{0.8934}]\int_0^Y{exp(-u^3) du} C0(y)=[0.8934C0∗]∫0Yexp(−u3)du
Y = y ( 3 B ) 1 3 = y 3 3 D 0 1 3 ω − 1 2 υ 1 6 \ Y = \dfrac{y}{(3B)^{\frac{1}{3}}} = \dfrac{y}{\sqrt[3]{3}D_0^\frac{1}{3}\omega^{-\frac{1}{2}}\upsilon^{\frac{1}{6}}} Y=(3B)31y=33D031ω−21υ61y
其中,
D
0
\ D_0
D0,
υ
\ \upsilon
υ为常数;
C
0
∗
\ C_0^*
C0∗,
w
\ w
w和
y
\ y
y为变量,画出
C
0
\ C_0
C0与
C
0
∗
\ C_0^*
C0∗,
C
0
\ C_0
C0与
w
\ w
w,
C
0
\ C_0
C0与
y
\ y
y的函数图像。
代码
from scipy.integrate import quad
import math as m
import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
D_0 = 5 * m.pow(10, -5) #常数
v = 1.01 * m.pow(10, -6)
ls_C1 = [] #C0*列表
ls_C0 = []
ls_w = []
ls_y = []
for C_1 in np.arange(0.0,100.1, 10):
for w in range(1, 10001, 1000):
for y in np.arange(m.pow(10,-5), m.pow(10,-3), 10 * m.pow(10,-5)):
C_1 = float(C_1)
y = float(y)
Y = y/(m.pow(3, 1/3) * m.pow(D_0, 1/3) * m.pow(w, -1/2) * m.pow(v, 1/6)) #计算Y
C_0 = (C_1/0.8934) * quad(lambda u:m.exp(-m.pow(u, 3)),0, Y)[0] #计算C0
ls_C1.append(C_1)
ls_w.append(w)
ls_y.append(y)
ls_C0.append(C_0)
fig = plt.figure() #创建一个图
ax = fig.add_subplot(111, projection='3d')
X, Y, Z = np.array(ls_C1), np.array(ls_w), np.array(ls_y) #给X,Y,Z赋值ndarray数组, 分别为C0*, w, y
C0 = np.array(ls_C0) #给C0赋值ndarray数组
cm = plt.cm.get_cmap('jet') #颜色映射,为jet型映射规则
fig = ax.scatter3D(X,Y,Z, c = C0, cmap=cm)
cb = plt.colorbar(fig) #设置坐标轴
ax.set_xlabel('C0*')
ax.set_ylabel('w')
ax.set_zlabel('y')
cb.ax.tick_params(labelsize=12)
cb.set_label('C0', size = 16)
plt.show()
**需要注意不能将步长设置太短。因为当步长设置太短,图像中数据点过密,外部点会遮盖内部点,无法观察出变化趋势。
运行结果
本文地址:https://blog.csdn.net/weixin_40572034/article/details/112623684
上一篇: 安装Python及Pycharm环境
下一篇: Java复习笔记(Wust)