0

I have 2 lists:

losses = [12,13,15,10,9,8]
dots = [1,0,0,1,0,0]

How can I plot the main line from the losses list, and wherever there's a 1 in the dots list have a dot on that line?

I currently have something like this (note that it's 2 different lists from the above example so the values are a bit different)

plt.plot(losses, c = 'b')
plt.plot(dots, c='r');

But I'm not sure how to make only dots on the main line

enter image description here

Penguin
  • 1,923
  • 3
  • 21
  • 51

2 Answers2

2

what about using a suitable marker?

from matplotlib import pyplot as plt

losses = [12,13,15,10,9,8]
dots = [1,0,0,1,0,0]

# value from losses whenever corresponding dots value is 1:
d = [v if d else None for d, v in zip(dots, losses)]

plt.plot(losses, c='b')
plt.plot(d, c='b', marker='|', markersize=40)

enter image description here

FObersteiner
  • 22,500
  • 8
  • 42
  • 72
1

Your diagram doesn't match your description, but here's how to do what you described. You do the points as a scatter plot. You can use numpy's fancy indexing to pick the points from the x and y axes where "dots" is True. Note that it has to be True/False, so I used ==1 to convert your numbers to booleans.

import matplotlib.pyplot as plt
import numpy as np

losses = np.array([12,13,15,10,9,8])
dots = np.array([1,0,0,1,0,0])==1
x = np.arange(6)*50000

xscat = x[dots]
yscat = losses[dots]

plt.plot(x, losses, c = 'b')
plt.scatter(xscat, yscat, c='r');
plt.show()

enter image description here

Tim Roberts
  • 48,973
  • 4
  • 21
  • 30