在Matplotlib中向3d颤动图添加颜色 [英] Adding colors to a 3d quiver plot in matplotlib
问题描述
我想在我的3d颤动图中绘制与颜色图相对应的颜色.该图的2d版本具有一个可选数组,该数组用于将颜色映射到箭头.如何在3d版本中创建相同的效果?
3D颤动图是1.4中的一项新功能(及其文档),其边缘可能仍然有些粗糙.在这种情况下,我们可以尝试使用这样一种事实,即将颤动形式实现为LineCollection
,它最终(最终)继承自ScalarMappable
,这意味着它知道什么是色彩映射表,并且返回的艺术家具有方法set_array
.>
基于文档此处
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) *
np.sin(np.pi * z))
q = ax.quiver(x, y, z, u, v, w, length=0.1, cmap='Reds', lw=2)
q.set_array(np.random.rand(np.prod(x.shape)))
plt.show()
但是,您会注意到 heads 和 shaft 是不同的颜色,这是由于每个零件的绘制方式的实现细节所致这是自己的台词.
直接使用Norm
和颜色映射功能并将结果传递给colors
可能是更好的方法.
I want to have colors corresponding to a colormap in my 3d quiver plot. The 2d version of the plot has an optional array that is used to map colors to the arrows. How can I create the same effect in the 3d version?
3D quiver plots are a brand-new feature in 1.4 it (and it's documentation) might still be a bit rough around the edges. In this case we can try to use the fact that the quiver is implemented as a LineCollection
which (eventually) inherits from ScalarMappable
which means it knows what a colormap is and the returned artist has the method set_array
.
Building on the docs here
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) *
np.sin(np.pi * z))
q = ax.quiver(x, y, z, u, v, w, length=0.1, cmap='Reds', lw=2)
q.set_array(np.random.rand(np.prod(x.shape)))
plt.show()
However, you will note the heads are a different color than the shaft which is due to a implementation detail of the way that it is implemented each part is drawn as it's own line.
Directly using the Norm
and color map functions and passing the result to colors
might be a better course.
这篇关于在Matplotlib中向3d颤动图添加颜色的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!