我正在寻找一种方法来更改 3D 绘图网格线的颜色,但无法找到一种干净且简单的方法来实现此目的。我找到的唯一答案就在这里,但结果有点复杂。我想知道是否有一种更简单的方法可以使用 matplotlib 为 3D 绘图的网格线着色mpl_toolkits.mplot3d
在这里找到简单的例子
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams['legend.fontsize'] = 10
fig = plt.figure()
ax = fig.gca(projection='3d')
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-2, 2, 100)
r = z**2 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud) 你能用 3d 形式呈现这个箭头吗?
import matplotlib.patches as patches
style="Simple,tail_width=0.5,head_width=4,head_length=8"
kw = dict(arrowstyle=style, color=b)
a3 = patches.FancyArrowPatch((0, 0), (99, 100),connectionstyle="arc3,rad=-0.3", **kw, lw=cfg._sections['styles'].get('arrows'))
Run Code Online (Sandbox Code Playgroud)
我试过:
import matplotlib.patches as patches
style="Simple,tail_width=0.5,head_width=4,head_length=8"
kw = dict(arrowstyle=style, color=b)
a3 = patches.FancyArrowPatch((0, 0), (1, 1), (0.5, 1.5),connectionstyle="arc3,rad=-0.3", **kw, lw=cfg._sections['styles'].get('arrows'))
Run Code Online (Sandbox Code Playgroud)
错误是:
a3 = patches.FancyArrowPatch((0, 0), (1, 1), (0.5, 1.5),connectionstyle="arc3,rad=-0.3", **kw, lw=1)
File "/home/linux/.local/lib/python3.6/site-packages/matplotlib/patches.py", line 4068, in __init__
raise ValueError("either posA and posB, or path need to provided")
ValueError: either posA and posB, or path need to provided
Run Code Online (Sandbox Code Playgroud)
或者至少将箭头放在 3d 图中的一个点上?
基本上,我有一个由一组时间序列组成的曲面图,我想在特定高度添加剖面图,以更好地了解一年中值高于所选阈值的时期。
由此:
其中显示平面但不是剖面
对此:
有什么建议吗?
使用 alpha 和相机仰角并没有解决问题
平面似乎仍然在人物的前面,而不是作为一个截面
我有一个数据集,它将 phi 和 theta 的元组映射到代表信号强度的值。我想将它们绘制在球体上。我只是按照 matplotlib 的演示进行操作,并根据我的用例调整了代码。
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
u = phi
v = theta
vals =vals/vals.max()
Map = cm.coolwarm
facecolors = Map(vals[:])
x = 10 * np.outer(np.cos(u), np.sin(v))
y = 10 * np.outer(np.sin(u), np.sin(v))
z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap=cm.coolwarm,
linewidth=0, antialiased=False, facecolors=facecolors)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会生成一条错误消息 IndexError: index 4 is out ofbounds for …