Tengo 2 puntos y por cada x puntos. Puedo dibujar la trama con este código:

import matplotlib.pyplot as plt

x = [0, 2, 4, 6]
y = [(1, 5), (1, 3), (2, 4), (2, 7)]


plt.plot(x, [i for (i,j) in y], 'rs', markersize = 4)
plt.plot(x, [j for (i,j) in y], 'bo', markersize = 4)

plt.xlim(xmin=-3, xmax=10)
plt.ylim(ymin=-1, ymax=10)

plt.xlabel('ID')
plt.ylabel('Class')
plt.show()

Esta es la salida:

Sample Plot

¿Cómo puedo dibujar una línea delgada que conecta cada par de puntos y? La salida deseada es:

Desired Output

4
iso_9001_ 3 ene. 2020 a las 20:04

2 respuestas

La mejor respuesta

Solo agrega plt.plot((x,x),([i for (i,j) in y], [j for (i,j) in y]),c='black')

enter image description here

3
Guinther Kovalski 3 ene. 2020 a las 17:13

Alternativamente, también puede usar LineCollection. La solución a continuación está adaptada de esta respuesta.

from matplotlib import collections as matcoll

x = [0, 2, 4, 6]
y = [(1, 5), (1, 3), (2, 4), (2, 7)]

lines = []
for i, j in zip(x,y):
    pair = [(i, j[0]), (i, j[1])]
    lines.append(pair)

linecoll = matcoll.LineCollection(lines, colors='k')

fig, ax = plt.subplots()
ax.plot(x, [i for (i,j) in y], 'rs', markersize = 4)
ax.plot(x, [j for (i,j) in y], 'bo', markersize = 4)
ax.add_collection(linecoll)

enter image description here

0
Sheldore 5 ene. 2020 a las 13:49