Aus Ihrer Frage geht hervor, dass mir nicht zu 100 % klar ist, was Sie genau tun wollen.
Möchten Sie nur jeden Scheitelpunkt einer Linie beschriften? Oder wollen Sie nur Scheitelpunkte beschriften, die ganze Zahlen sind? Oder wollen Sie interpolieren, wo ganzzahlige "Kreuzungen" entlang der Linie liegen und diese beschriften?
Um Ihre Textdatei zu laden, schauen Sie zunächst in numpy.loadtxt
wenn Sie es nicht schon sind. In Ihrem speziellen Fall könnten Sie etwas tun wie:
z, x, y = np.loadtxt('data.txt', usecols=[0, 5, 6]).T
Auf jeden Fall ein kurzes Beispiel für die einfachste Option (Beschriftung jedes Scheitelpunkts):
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(10)
y = 2 * x
z = x ** 2
fig, ax = plt.subplots()
ax.plot(x, y, 'bo-')
for X, Y, Z in zip(x, y, z):
# Annotate the points 5 _points_ above and to the left of the vertex
ax.annotate('{}'.format(Z), xy=(X,Y), xytext=(-5, 5), ha='right',
textcoords='offset points')
plt.show()
Für die zweite Option könnten wir uns etwas ähnliches vorstellen (ähnlich dem Vorschlag von @mathematical.coffee):
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()