plt.plot()根据x,y,z画图
时间: 2023-11-03 21:09:38 浏览: 197
当使用 `plt.plot()` 时,可以根据需要的维度,传递不同数量的参数来绘制图形。
- 仅传递 x 和 y 坐标,绘制 2D 折线图
```python
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(0, 10, 0.1)
y = np.sin(x)
plt.plot(x, y)
plt.show()
```
- 传递 x、y 和 z 坐标,绘制 3D 折线图
```python
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(x, y, z)
plt.show()
```
注意:在绘制 3D 图形时,需要使用 `Axes3D` 类和 `projection='3d'` 参数。
相关问题
N = len(RV_5min) - 1 RV_real_pred = np.zeros(N+1) RV_real_uub = np.zeros(N+1) RV_real_llb = np.zeros(N+1) RV_real_pred[0] = RV_5min[0] RV_real_uub[0] = RV_5min[0] RV_real_llb[0] = RV_5min[0] alpha=0.05 z_alpha = norm.ppf(1-alpha/2) for i in range(N): RV_real_pred[i+1] = c + beta*RV_5min[i] RV_real_uub[i+1] = RV_real_pred[i+1] + z_alpha*np.sqrt(np.var(RV_diff))*np.sqrt(1+beta**2) RV_real_llb[i+1] = RV_real_pred[i+1] - z_alpha*np.sqrt(np.var(RV_diff))*np.sqrt(1+beta**2) plt.plot(RV_5.index, np.maximum(0, RV_real_pred), 'k:') plt.plot(RV_5.index, np.maximum(0, RV_real_uub), 'r--', RV_5.index, np.maximum(0, RV_real_llb), 'r--') plt.xlabel('Time') plt.ylabel('RV') plt.legend(['Predicted', 'Upper Bound', 'Lower Bound']) plt.show() 画图x和y的长度不一样怎么改
为了绘制图形,确保x和y的长度一致,可以使用相同的时间轴作为x轴。假设RV_5min.index是时间轴,可以将其作为x轴,而RV_5min作为y轴。请注意,RV_5min和RV_diff的长度可能不同,因此需要相应调整。
下面是修正后的代码:
```python
N = len(RV_5min) - 1
RV_real_pred = np.zeros(N+1)
RV_real_uub = np.zeros(N+1)
RV_real_llb = np.zeros(N+1)
RV_real_pred[0] = RV_5min[0]
RV_real_uub[0] = RV_5min[0]
RV_real_llb[0] = RV_5min[0]
alpha=0.05
z_alpha = norm.ppf(1-alpha/2)
for i in range(N):
RV_real_pred[i+1] = c + beta*RV_5min[i]
RV_real_uub[i+1] = RV_real_pred[i+1] + z_alpha*np.sqrt(np.var(RV_5min))*np.sqrt(1+beta**2)
RV_real_llb[i+1] = RV_real_pred[i+1] - z_alpha*np.sqrt(np.var(RV_5min))*np.sqrt(1+beta**2)
plt.plot(RV_5min.index, np.maximum(0, RV_real_pred), 'k:')
plt.plot(RV_5min.index, np.maximum(0, RV_real_uub), 'r--', RV_5min.index, np.maximum(0, RV_real_llb), 'r--')
plt.xlabel('Time')
plt.ylabel('RV')
plt.legend(['Predicted', 'Upper Bound', 'Lower Bound'])
plt.show()
```
这样修改后,x轴和y轴的长度应该一致,可以正确地绘制图形。
import numpy as np import matplotlib.pyplot as plt # 二元二次函数 def f(x,y): return x**2+10*y**2import numpy as np import matplotlib.pyplot as plt # 梯度函数 def grad_f(x,y): return np.array([2*x,20*y]) x0 = np.array([10,1]) alphs_k = 0.085 iter_num = 15 x_list = [x0] for i in range(iter_num): x_k = x_list[-1] x_next = x_k - alphs_k*grad_f(x_k[0],x_k[1]) x_list.append(x_next) # 画图 delta = 0.05 x = np.arange(-15.0,15.0,delta) y = np.arange(-5.0,5.0,delta) X,Y = meshgrid(x,y) Z = f(X,Y) fig,ax = plt.subplots() cs = ax.contour(X,Y,Z) ax.calbel(cs,inline=1,fontsize=10) x_list = np.array(x_list) ax.plot(x_list[:,0],x_list[:,1],'-0') plt.show()
这段代码实现了梯度下降法求解二元二次函数的最小值,并将迭代过程可视化。
具体来说,代码中定义了二元二次函数 $f(x,y) = x^2 + 10y^2$ 和梯度函数 $\nabla f(x,y) = [2x, 20y]$。然后从初始点 $[10,1]$ 开始进行迭代,每一步都按照梯度下降法的公式 $x_{k+1} = x_k - \alpha_k \nabla f(x_k)$ 计算下一个点的位置,并将每个迭代点的坐标存储在列表 `x_list` 中。
最后,通过 `matplotlib` 库中的 `contour` 函数画出函数的等高线图,并将迭代过程的点以连线的形式绘制在图中,从而展示了梯度下降法逐步接近函数的最小值的过程。
阅读全文