【问题标题】:how to mark a point in matplotlib如何在matplotlib中标记一个点
【发布时间】:2013-11-30 22:50:11
【问题描述】:

我正在使用 Matplotlib 在 3D 空间中绘制曲面图。为了使绘图更具可读性,我想标记表面的最低点(我已经使用数据找到了 x,y 坐标),显示它的 x,y,z 值。另外,我想注释 x,y,z 轴,指定该轴上值的名称。有人知道怎么做吗?非常感谢。

这是代码(我正在从文件中读取错误率数据):

import numpy as np
import csv
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

def readdata(filename):
   reader = np.loadtxt(filename, dtype = np.ndarray, delimiter=',')
   return reader

fig = plt.figure()
ax = fig.gca(projection='3d')
Z = readdata('continuedData')
for i in range(len(Z)):
    Z[i] = float(Z[i])
Z = np.reshape(Z,(15,15))
X = np.arange(0.011, 0.026, 0.001)
Y = np.arange(0.11, 0.25, 0.01)
X, Y = np.meshgrid(Y, X)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm,
      linewidth=0, antialiased=False)
ax.set_ylabel('learningRate')
ax.set_xlabel('momentum')
ax.set_zlabel('error rate')
ax.annotate('lowestPoint', xyz=(0.011,0.11,1.78199), xycoords='data',xytext=(10,10),
         textcoords='offset points', arrowprops=dict(arrowstyle="->"))
plt.show()

我正在尝试这样做,但 ax.annotate 出现错误:

Traceback (most recent call last):
File "/home/yongfeng/workspace/ANN/plotContinuedData.py", line 25, in <module>
ax.annotate('lowestPoint', xyz=(0.011,0.11,1.78199), xycoords='data',xytext=         (10,10),textcoords='offset points', arrowprops=dict(arrowstyle="->"))
File "/usr/lib/pymodules/python2.7/matplotlib/axes.py", line 3348, in annotate
a = mtext.Annotation(*args, **kwargs)
TypeError: __init__() takes at least 3 arguments (6 given)

其实我不知道我是否需要同时指定 Z 值或者函数会自动指定。所以我想注释情节的左角。

【问题讨论】:

  • 您能发布代码以生成当前状态的情节吗?
  • Matplotlib 拥有广泛的annotation support
  • 我不认为这是同一个问题,因为这里我已经绘制了曲面,我只想在图中添加一些注释。谢谢。
  • 更具体地说,如果您查看该问题的答案,它会显示如何制作 3D 箭头并使用它来注释 3D 绘图中的点——我已经广泛使用了这个配方并且它让我想知道它是如何尚未内置到 matplotlib 中的。

标签: python matplotlib plot


【解决方案1】:

尝试使用 pylab.annotate() 作为使用 here

TypeError: __init__() takes at least 3 arguments (6 given)

这表示您使用的功能不正确。输入help(ax.annotate)

【讨论】:

  • 我收到错误“__init__() 需要至少 3 个参数(3 个给定)”,因为我自己的问题(在一个希望注释索引的 for 循环中)。代码:axarr[1].annotate('%s' % n, n=n, xytext='data')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-04
  • 2021-10-13
  • 1970-01-01
相关资源
最近更新 更多