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?

Georgy
  • 12,464
  • 7
  • 65
  • 73
gjenness
  • 373
  • 1
  • 3
  • 6

1 Answers1

13

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]]
mwaskom
  • 46,693
  • 16
  • 125
  • 127