8

I'm writing an interface to do scatter plots in Matplotlib, and I'd like to be able to access the data from a python script.

Right now, my interface is doing:

scat = self.axes.scatter(x_data, y_data, label=label, s=size)

With a standard axes.plot I can do something like:

line = self.axes.plot(x_data, y_data)
data = line[0].get_data()

and that works. What I'd like is something similar, but with the scatter plot.

Can anyone suggest a similar method?

1 Answer 1

14

A scatter plot is drawn using PathCollection, so the x, y positions are called "offsets":

import numpy as np
import matplotlib.pyplot as plt

f, ax = plt.subplots()
scat = ax.scatter(np.random.randn(10), np.random.randn(10))

print scat.get_offsets()

[[-0.17477838 -0.47777312]
 [-0.97296068 -0.98685982]
 [-0.18880346  1.16780445]
 [-1.65280361  0.2182109 ]
 [ 0.92655599 -1.40315507]
 [-0.10468029  0.82269317]
 [-0.09516654 -0.80651275]
 [ 0.01400393 -1.1474178 ]
 [ 1.6800925   0.16243422]
 [-1.91496598 -2.12578586]]
Sign up to request clarification or add additional context in comments.

1 Comment

for me (matplotlib==3.4.2) get_offsets returned a masked array so I needed to do: scat.get_offsets().data to obtain the same result as above.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.