2024-06-28 19:00:22 发布
网友
如果我有对应于球坐标中给定点(θ,phi)的值数组,如何在球面上绘制密度图?我发现了如何构造一个球体,例如Bloch sphere或plotting on a sphere。第一个例子是非常好看的-轴是需要和热图。在
如果您将QuTip的Bloch类的子类化,并更改它绘制球体的方式,则可以绘制密度图并保留它创建的所有其他框架。在
QuTip
Bloch
获取^{} examples,并更改Bloch类的绘图函数。把它放在你自己的子类中可以防止你对库进行黑客攻击。在
from qutip import Bloch from math import sqrt, sin, cos, pi from colorsys import hsv_to_rgb from numpy import linspace, outer, ones, sin, cos, arccos, arctan2, size, empty class BlochDensity(Bloch): def plot_back(self): # back half of sphere u = linspace(0, pi, 25) v = linspace(0, pi, 25) x = outer(cos(u), sin(v)) y = outer(sin(u), sin(v)) z = outer(ones(size(u)), cos(v)) colours = empty(x.shape, dtype=object) for i in range(len(x)): for j in range(len(y)): theta = arctan2(y[i,j], x[i,j]) phi = arccos(z[i,j]) colours[i,j] = self.density(theta, phi) self.axes.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=colours, alpha=self.sphere_alpha, linewidth=0, antialiased=True) # wireframe self.axes.plot_wireframe(x, y, z, rstride=5, cstride=5, color=self.frame_color, alpha=self.frame_alpha) # equator self.axes.plot(1.0 * cos(u), 1.0 * sin(u), zs=0, zdir='z', lw=self.frame_width, color=self.frame_color) self.axes.plot(1.0 * cos(u), 1.0 * sin(u), zs=0, zdir='x', lw=self.frame_width, color=self.frame_color) def plot_front(self): # front half of sphere u = linspace(-pi, 0, 25) v = linspace(0, pi, 25) x = outer(cos(u), sin(v)) y = outer(sin(u), sin(v)) z = outer(ones(size(u)), cos(v)) colours = empty(x.shape, dtype=object) for i in range(len(x)): for j in range(len(y)): theta = arctan2(y[i,j], x[i,j]) phi = arccos(z[i,j]) colours[i,j] = self.density(theta, phi) self.axes.plot_surface(x, y, z, rstride=1, cstride=1, facecolors=colours, alpha=self.sphere_alpha, linewidth=0, antialiased=True) # wireframe self.axes.plot_wireframe(x, y, z, rstride=5, cstride=5, color=self.frame_color, alpha=self.frame_alpha) # equator self.axes.plot(1.0 * cos(u), 1.0 * sin(u), zs=0, zdir='z', lw=self.frame_width, color=self.frame_color) self.axes.plot(1.0 * cos(u), 1.0 * sin(u), zs=0, zdir='x', lw=self.frame_width, color=self.frame_color)
我在这里所做的是让绘图部分调用BlochDensity:self.density(theta, phi)的函数,我还没有定义这个函数。在
BlochDensity
self.density(theta, phi)
创建BlochDensity对象后,需要创建该函数,即theta, phi到密度的映射。我建议使用SciPy's 2D interpolation创建函数,如下所示:
theta, phi
如果要提高分辨率,那么只需在BlochDensity的plot_*函数内更改linspace中的数字。在
plot_*
如果您将
QuTip
的Bloch
类的子类化,并更改它绘制球体的方式,则可以绘制密度图并保留它创建的所有其他框架。在获取^{} examples ,并更改
Bloch
类的绘图函数。把它放在你自己的子类中可以防止你对库进行黑客攻击。在我在这里所做的是让绘图部分调用
BlochDensity
:self.density(theta, phi)
的函数,我还没有定义这个函数。在创建
^{pr2}$BlochDensity
对象后,需要创建该函数,即theta, phi
到密度的映射。我建议使用SciPy's 2D interpolation创建函数,如下所示:如果要提高分辨率,那么只需在
BlochDensity
的plot_*
函数内更改linspace中的数字。在相关问题 更多 >
编程相关推荐