I ran into a problem while upgrading code from Python 2 to Python 3 that required me to downgrade matplotlib to version 2.2.3 in order to get the functionality in place (all tests were passing except for plotting).
Once that dust settled, I attempted to individually upgrade to matplotlib==3.0.2 and ran into trouble with how scatter parses color sequences.
I had a lot of trouble finding a good solution online, but after sifting through a lot of forums and GitHub issues1, and trying many permutations of different syntaxes, I finally came around to a “clean” solution that passed the tests as they were written.
The issue was that the color argument must match the type of the x and y inputs into scatter, which was not the case before.
The code I was working with formed x and y by indexing a 2-d np.array (call it data), and I found that using np.reshape as follows led to the easiest backwards-compatible solution:
# inds represents indices
x = data[inds, 0]
y = data[inds, 1]
c = colors[inds] # colors is passed to be height of some function that takes x and y as inputs.
plt.scatter(np.reshape(x,-1),
np.reshape(y,-1),
c=np.reshape(c,-1),
cmap=color_map) # color_map defined elsewhere
If inds is length-1 or length-N, this syntax still works and respects the new requirements for coloring scatterplots.