标记matplotlib图中的最小点

时间:2018-02-13 20:18:14

标签: matplotlib plot

示例代码:

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。实现这一目标的最简单方法是什么? (注意:如果最小值达到平局,则应突出显示所有最小值)

我的解决方法是使用minzlist中找到分钟,然后说min_index = zlist.index(min(zlist)),然后从min_index xlist删除该条目(并保存) 1}},ylistzlist。然后使用仅一个点(最小值)的另一个ax.scatter命令单独绘制该点。但这看起来非常不优雅,而且不适用于领带。

1 个答案:

答案 0 :(得分:4)

您可以使用NumPy在zlist中找到最小值并生成一个布尔数组,其中zlist等于zmin(注意这可能不止一次)。然后使用np.where生成一个数组,redmask时为Trueblue为<{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()

enter image description here