在 matplotlib 图中标记最小值点

iam*_*max 4 plot matplotlib

示例代码:

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()
Run Code Online (Sandbox Code Playgroud)

一个简单的 3d 散点图...假设我希望最小点(在 z 轴上)是不同的颜色。所以那个点是第二个点:x = 2,y = 5,z = -3。实现这一目标的最简单方法是什么?(注意:如果最小值并列,则应突出显示所有最小值)

我的解决方法是使用min来查找分钟zlist,然后说min_index = zlist.index(min(zlist)),那么在删除该条目(并保存)min_indexxlistylistzlist。然后用另一个ax.scatter只有一个点(最小值)的命令单独绘制该点。但这似乎很不雅观,而且不适用于领带。

unu*_*tbu 6

您可以使用 NumPy 来查找最小值zlist并生成一个布尔数组,该数组在zlist等于时为 True zmin(注意这可能发生多次)。然后用于np.where生成一个数组,它是red何时maskTrueblue否则是:

zmin = np.min(zlist)
mask = np.array(zlist) == zmin
color = np.where(mask, 'red', 'blue')
Run Code Online (Sandbox Code Playgroud)

然后您可以传递color=colorax.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()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明