yt模块中的三维图形

2024-09-29 23:21:36 发布

您现在位置:Python中文网/ 问答频道 /正文

你能帮我查一下这个密码吗?我试图把力线积分到给定的点上。我不知道哪里出了错——情节没有流线型

数据-偶极子磁场为here

我试图改变数据和流线的数量

import numpy as np
import matplotlib.pyplot as plt
from numpy import array
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D                 # 3d graph
from mpl_toolkits.mplot3d import proj3d                 # 3d graph
import math
from matplotlib import patches
import code
import yt
from yt import YTArray  # arrays in yt module
from yt.visualization.api import Streamlines  # force lines
import matplotlib.pylab as pl# Choose point in field
X_point = 0.007089085922957821
Y_point = 0.038439192046320805
Z_point = 0# Load data (dictionary)
try:
    import cPickle as pickle
except ImportError:  # python 3.x
    import picklewith open('data.p', 'rb') as fp:
    data = pickle.load(fp)Bx_d = data["Bx"]
By_d = data["By"]
Bz_d = data["Bz"]# 3d array of dipole magnetic field 
print(type(data))
bbox = np.array([[-0.15, 0.15], [0, 0.2], [-0.1, 0.1]]) # box, border
ds = yt.load_uniform_grid(data, Bx_d.shape, length_unit="Mpc", bbox=bbox, nprocs=100) # data, dimensionc = YTArray([X_point, Y_point, Z_point], 'm') # Define c: the center of the box, chosen point
c1 = ds.domain_center
print('c1', c1)
print(type(c1))
print('center',c)
N = 1 # N: the number of streamlines
scale = ds.domain_width[0] # scale: the spatial scale of the streamlines relative to the boxsize,
pos = c# Create streamlines of the 3D vector velocity and integrate them through
# the box defined above
streamlines = Streamlines(ds, pos, 'Bx', 'By', 'Bz', length=None) # length of integration
streamlines.integrate_through_volume()# Create a 3D plot, trace the streamlines through the 3D volume of the plot
fig=pl.figure()
ax = Axes3D(fig)
ax.scatter(X_point, Y_point, Z_point, marker = 'o', s=40, c='green')
print('tisk', streamlines.streamlines)for stream in streamlines.streamlines:
    stream = stream[np.all(stream != 0.0, axis=1)]
    ax.plot3D(stream[:,0], stream[:,1], stream[:,2], alpha=0.1)# Save the plot to disk.
pl.savefig('streamlines.png')
plt.show()

输出: enter image description here


Tags: ofthefromimportdatastreammatplotlibas
1条回答
网友
1楼 · 发布于 2024-09-29 23:21:36

如果不了解更多关于数据的信息,以及print调用的输出是什么,就不完全清楚错误是什么。如果流线具有有意义的值(即stream[:,0]等的值在Axes3D的范围内,则应产生结果

调试选项将从检查单个值开始,然后继续在2D中绘制它们(使用每个stream(0,1)、(1,2)和(0,2))的组件对),然后检查如果允许Axes3D自动缩放xyz轴会发生什么情况。您还可以尝试使用alpha值,以查看线条是否太轻而看不见

这样生成的示例图像也会有所帮助,这样就可以清楚地了解matplotlib分配给Axes3D对象的属性的一些内容

相关问题 更多 >

    热门问题