Python - 3D绘图,水平线缺失和不正确的渐变显示

时间:2017-03-11 19:30:05

标签: python matplotlib plot 3d surface

我是3D表面图的新手,我正在尝试使用以下内容制作温度的3D图表作为距离和时间的函数:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm    

t = np.arange(0,60,1)
z = np.arange(5,85,5)

fig=plt.figure(1)
ax = fig.gca(projection='3d')
X, Y = np.meshgrid(z, t)
surface=ax.plot_surface(X,Y,T1, linewidth=1,cmap=cm.coolwarm, antialiased=False)
fig.colorbar(surface, shrink=0.5, aspect=5)
ax.view_init(ax.elev, ax.azim+90)
ax.set_title("Temperature Distribution 1")
ax.set_xlabel('z (cm)')
ax.set_ylabel('Time (min)')
ax.set_zlabel('Temperature ($^\circ$C)')
ax.set_xticks(np.arange(0,80, 15))
plt.savefig("3D_1.png",format='png',dpi=1000,bbox_inches='tight')
plt.show()

T1是2D数据。这产生以下结果:

3D Surface Plot of Temperature

只有一条水平线显示在60厘米左右,但我想每隔5厘米一条水平线(每隔5厘米拍摄一次数据)。沿距离轴的情节似乎只有2个部分。颜色梯度以大块显示,而不是沿着整个长度显示为温度的函数。

e.g。从距离0~40cm的50-60分钟之间的时间,温度从~180度到~20度,但是该块的颜色一直是暗红色,而应该从深红色开始并减少到蓝色。如何让温度沿整个长度轴显示正确的梯度。

此外,温度图例以%表示,而不是以度为单位的温度值,如何解决此问题?

1 个答案:

答案 0 :(得分:0)

查看我们找到的documentation of surface

  

rstridecstride kwargs设置用于对输入数据进行采样以生成图形的步幅。如果传入1k乘1k数组,则步幅的默认值将导致绘制100x100网格。默认为10。

因此,使用

surface=ax.plot_surface(X,Y,T1, rstride=8, cstride=8)

你得到了

enter image description here

使用

surface=ax.plot_surface(X,Y,T1, rstride=5, cstride=1)

你得到了

enter image description here

<小时/> 这是一个如何为这种情况创建可重现数据的示例:

t = np.arange(0,60,1)
z = z=np.arange(5,85,5)
f = lambda z, t, z0, t0, sz, st: 180.*np.exp(-(z-z0)**2/sz**2 -(t-t0)**2/st**2)
X, Y = np.meshgrid(z, t)
T1 =f(X,Y,-20.,56, 40.,30.)