我有一个由三个一维数组(X,Y,Z)组成的数据,我想创建一个类似于原始轮廓轮廓(https://www.originlab.com/doc/Origin-Help/Contour-Profile)的图形,其中我有一个3d数据绘制在2d轮廓中,其中z值由图形颜色表示,另外两个图形表示特定x和y值的曲面轮廓(或切片)。我的问题是如何创建配置文件。
我首先创建了新的x和y数组,并通过对scipy.interpolate.griddata
中的数据进行插值,为z创建了一个网格曲面
现在我可以创建轮廓图,但我不知道如何在xz和yz平面上创建轮廓。我通过使用zdir=x
和zdir=y
(https://matplotlib.org/3.3.1/gallery/mplot3d/contour3d_3.html)发现了如何在3d绘图中做到这一点,但这只适用于3d图形。我还知道我可以用ax.contour(x, y, z, [zvalue])
在'xy‘平面上跟踪特定z值的轮廓。我想做一些类似于“xz”和“yz”平面的事情。
我的代码是这样的:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from scipy.interpolate import griddata
# reading the data
path = 'data/2019_12_11_15h17m29s_TZO_1Nd_3Hz_ref_900nm_900mW.txt_output.dat'
df = pd.read_csv(path)
X = df.position
Y = df.time
Z = df.signal
# interpolating data to create a surface
xi = np.linspace(X.min(), X.max(), 100)
yi = np.linspace(Y.min(), Y.max(), 100)
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='linear')
zi = np.nan_to_num(zi)
# if I want to plot a 2D contour plot
fig = plt.figure()
ax = plt.axes()
ax.contourf(xi, yi, zi, levels=300, cmap="RdBu_r")
plt.show()
# if I want to plot a 3d surface with profiles
xi2, yi2 = np.meshgrid(xi, yi)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot_surface(xi2, yi2, zi, rstride=3, cstride=3, alpha=0.5)
cset = ax.contour(xi2, yi2, zi, zdir='x', offset=X.min()-30, cmap=cm.coolwarm, levels=10)
cset = ax.contour(xi2, yi2, zi, zdir='y', offset=Y.max()+30, cmap=cm.coolwarm, levels=10)
ax.set_xlim(X.min()-30, X.max()+30)
ax.set_ylim(Y.min()-30, Y.max()+30)
ax.set_zlim(Z.min(), Z.max())
plt.show()
# if I want to make a profile in xy plane:
fig = plt.figure()
ax = plt.axes()
ax.contour(xi, yi, zi, [1])
plt.show()
但是我不知道如何在'xz‘和'yz’平面上创建轮廓
发布于 2020-11-09 02:09:01
我为自己找到了一种方法,这种方法并不完全是我想要的,但却完美地工作着。其思想是固定zi
的一列/行,并根据xi
/yi
绘制,以生成xz/yz平面的轮廓。通过改变for循环中的列/行,我得到了类似于等高线图级别的结果:
for i in range(0,len(zi),step):
z_xz = zi[i,:]
plt.plot(xi,z_xz)
和
for i in range(0,len(zi[0]),step):
z_xz = zi[:,i]
plt.plot(yi,z_xz)
如果你找到更好的解决方案,请让我知道
https://stackoverflow.com/questions/64708003
复制相似问题