Python Matplotlib-使用值z标记直线上的点(x,y)

Python Matplotlib-使用值z标记直线上的点(x,y),python,label,matplotlib,Python,Label,Matplotlib,我正在尝试使用pyplot制作2d绘图。我正在读取一个包含多个列的文件,每个列包含大约100个介于1和10之间的值。我正在绘制第5列和第6列的对比图,这很好 我还想做的是用第0列的整数值标记结果行。所以这条直线上有11个点,在(x,y)位置,列0是一个整数。我还想用那个整数来标记这些点 我真的很感谢你的帮助,这让我发疯了 从你的问题来看,我不是100%清楚你到底想做什么 是否只想标记直线中的每个顶点?还是只想标记为整数的顶点?或者,您想在整数“交叉点”沿直线的位置进行插值并标记它们吗 首先,要加

我正在尝试使用pyplot制作2d绘图。我正在读取一个包含多个列的文件,每个列包含大约100个介于1和10之间的值。我正在绘制第5列和第6列的对比图,这很好

我还想做的是用第0列的整数值标记结果行。所以这条直线上有11个点,在(x,y)位置,列0是一个整数。我还想用那个整数来标记这些点


我真的很感谢你的帮助,这让我发疯了

从你的问题来看,我不是100%清楚你到底想做什么

是否只想标记直线中的每个顶点?还是只想标记为整数的顶点?或者,您想在整数“交叉点”沿直线的位置进行插值并标记它们吗

首先,要加载文本文件,请查看
numpy.loadtxt
,如果您还没有。在您的特定情况下,您可以执行以下操作:

z, x, y = np.loadtxt('data.txt', usecols=[0, 5, 6]).T
无论如何,作为最简单选项(标记每个顶点)的快速示例:

现在,对于第二个选项,我们可能会有类似的内容(类似于@mathematic.coffee所建议的内容):

将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.arange(-0.6,5.6,0.2)
y=2*x
z=x**2
图,ax=plt.子批次()
ax.图(x,y,'bo-')
#请注意阈值。。。我假设你希望1.000001被视为int。
#否则,您将使用“z%1==0”,但要注意精确的浮点比较!!
整数=z%1<1e-6
对于zip中的(X,Y,Z)(X[整数]、Y[整数]、Z[整数]:
ax.annotate(“{.0f}.”格式(Z),xy=(X,Y),xytext=(-10,10),ha='right',
textcoords='offset points',
arrowprops=dict(arrowstyle='->',shrinkA=0))
plt.show()

从你的问题来看,我不是100%清楚你到底想做什么

是否只想标记直线中的每个顶点?还是只想标记为整数的顶点?或者,您想在整数“交叉点”沿直线的位置进行插值并标记它们吗

首先,要加载文本文件,请查看
numpy.loadtxt
,如果您还没有。在您的特定情况下,您可以执行以下操作:

z, x, y = np.loadtxt('data.txt', usecols=[0, 5, 6]).T
无论如何,作为最简单选项(标记每个顶点)的快速示例:

现在,对于第二个选项,我们可能会有类似的内容(类似于@mathematic.coffee所建议的内容):

将numpy导入为np
将matplotlib.pyplot作为plt导入
x=np.arange(-0.6,5.6,0.2)
y=2*x
z=x**2
图,ax=plt.子批次()
ax.图(x,y,'bo-')
#请注意阈值。。。我假设你希望1.000001被视为int。
#否则,您将使用“z%1==0”,但要注意精确的浮点比较!!
整数=z%1<1e-6
对于zip中的(X,Y,Z)(X[整数]、Y[整数]、Z[整数]:
ax.annotate(“{.0f}.”格式(Z),xy=(X,Y),xytext=(-10,10),ha='right',
textcoords='offset points',
arrowprops=dict(arrowstyle='->',shrinkA=0))
plt.show()

到目前为止,您尝试了什么?换句话说,您是否有一些示例代码来显示哪些有效,哪些无效(或者您在哪里迷失了方向)。请记住,您可以在编辑问题时格式化代码…您尝试过什么?到目前为止,你能给出一段代码吗
vals[vals%1==0]
查找整数,您可以使用它在上面绘制文本
plt.text(x,y,str(y))
用于所有
x,y
对。到目前为止,您尝试了什么?换句话说,您是否有一些示例代码来显示哪些有效,哪些无效(或者您在哪里迷失了方向)。请记住,您可以在编辑问题时格式化代码…您尝试过什么?到目前为止,你能给出一段代码吗
vals[vals%1==0]
查找整数,您可以使用它在上面绘制文本<代码>plt.text(x,y,str(y))用于所有
x,y
对。我在这里遇到了一个错误:
TypeError:\uuuuu init\uuuuuuu()缺少一个必需的位置参数:'s'
在这一行
arrowprops=dict(arrowstyle='->',shrinkA=0)
我在这里遇到一个错误:
TypeError:\uu init此行缺少1个必需的位置参数:“s”
arrowprops=dict(arrowstyle='->',shrinkA=0)
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-0.6, 5.6, 0.2)
y = 2 * x
z = x**2

fig, ax = plt.subplots()
ax.plot(x, y, 'bo-')

# Note the threshold... I'm assuming you want 1.000001 to be considered an int.
# Otherwise, you'd use "z % 1 == 0", but beware exact float comparisons!!
integers = z % 1 < 1e-6
for (X, Y, Z) in zip(x[integers], y[integers], z[integers]):
    ax.annotate('{:.0f}'.format(Z), xy=(X,Y), xytext=(-10, 10), ha='right',
                textcoords='offset points', 
                arrowprops=dict(arrowstyle='->', shrinkA=0))

plt.show()