示例代码:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xlist = [1, 2, 3, 4, 5]
ylist = [1, 5, 3, 4, 2]
zlist = [6, -3, 6, -1, 2]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xlist, ylist, zlist)
plt.ticklabel_format(useOffset=False)
plt.show()
一个简单的三维散点图......假设我希望最小点(在z轴上)是不同的颜色。所以这一点是第二点:x = 2,y = 5,z = -3。实现这一目标的最简单方法是什么? (注意:如果最小值达到平局,则应突出显示所有最小值)
我的解决方法是使用min
在zlist
中找到分钟,然后说min_index = zlist.index(min(zlist))
,然后从min_index
xlist
删除该条目(并保存) 1}},ylist
和zlist
。然后使用仅一个点(最小值)的另一个ax.scatter
命令单独绘制该点。但这看起来非常不优雅,而且不适用于领带。
答案 0 :(得分:4)
您可以使用NumPy在zlist
中找到最小值并生成一个布尔数组,其中zlist
等于zmin
(注意这可能不止一次)。然后使用np.where
生成一个数组,red
为mask
时为True
,blue
为<{1}}:
zmin = np.min(zlist)
mask = np.array(zlist) == zmin
color = np.where(mask, 'red', 'blue')
然后您可以将color=color
传递给ax.scatter
以创建所需的散点图:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
xlist = [1, 2, 3, 4, 5]
ylist = [1, 5, 3, 4, 2]
zlist = [6, -3, 6, -1, 2]
zmin = np.min(zlist)
mask = np.array(zlist) == zmin
color = np.where(mask, 'red', 'blue')
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(xlist, ylist, zlist, color=color)
plt.ticklabel_format(useOffset=False)
plt.show()