Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MatPlotLib Scatterplot removal

I am trying to remove some data plotted as a scatter plot on matplotlib in python. I plot some scatter data and some 'plot' line data

To remove the 'plot' line data I use : del self.plot1.lines[0]

What is the equivalent command to remove a scatter plot? I cannot seem to find it.

like image 666
Oxygene Avatar asked Mar 26 '12 07:03

Oxygene


2 Answers

Oz123's answer partially answers this question, but his solution would inflate the size of your plot in memory linearly. If you're dealing with a lot of data, this isn't an option.

Thankfully, one of the scatterplot object's methods is remove.

If you change the line abc.set_visible(False) to abc.remove(), the results look the same, except the scatterplot is now actually removed from the plot, instead of being set to not visible.

like image 120
Poik Avatar answered Oct 06 '22 15:10

Poik


Scatter plot is actually a collection of lines (circles to be exacts).

if you store your scatter plot in an object you could access it's properties, one of them is called set_visible. Here is an example:

"""
make a scatter plot with varying color and size arguments
code mostly from:
http://matplotlib.sourceforge.net/mpl_examples/pylab_examples/scatter_demo2.py
"""
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import matplotlib.cbook as cbook

# load a numpy record array from yahoo csv data with fields date,
# open, close, volume, adj_close from the mpl-data/example directory.
# The record array stores python datetime.date as an object array in
# the date column
datafile = cbook.get_sample_data('/usr/share/matplotlib/sampledata/goog.npy')
#datafile = /usr/share/matplotlib/sampledata
r = np.load(datafile).view(np.recarray)
r = r[-250:] # get the most recent 250 trading days

delta1 = np.diff(r.adj_close)/r.adj_close[:-1]

# size in points ^2
volume = (15*r.volume[:-2]/r.volume[0])**2
close = 0.003*r.close[:-2]/0.003*r.open[:-2]

fig = plt.figure()
ax = fig.add_subplot(111)
## store the scatter in abc object
abc=ax.scatter(delta1[:-1], delta1[1:], c=close, s=volume, alpha=0.75)
### if you comment that line of set False to True, you'll see what happens.
abc.set_visible(False)
#ticks = arange(-0.06, 0.061, 0.02)
#xticks(ticks)
#yticks(ticks)

ax.set_xlabel(r'$\Delta_i$', fontsize=20)
ax.set_ylabel(r'$\Delta_{i+1}$', fontsize=20)
ax.set_title('Volume and percent change')
ax.grid(True)

plt.show()
like image 24
oz123 Avatar answered Oct 06 '22 15:10

oz123