title: How can I change de parameters of gaussian_kde for a scatter plot colored by density in matplotlib
body: <p>As explained by Joe Kington answering in this question : <a href="https://stackoverflow.com/questions/20105364/how-can-i-make-a-scatter-plot-colored-by-density-in-matplotlib">How can I make a scatter plot colored by density in matplotlib</a>, I made a scatter plot colored by density. However, due to the complex distribution of my data, I would like to change the parameters used to calculate the density.
  Here is the results with some fake data similar to mine :
  <a href="https://i.stack.imgur.com/hOSTt.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/hOSTt.png" alt="Density plot : Unwanted result"></a>
  I would want to calibrate the density calculations of gaussian_kde so that the left part of the plot looks like this :
  <a href="https://i.stack.imgur.com/pug2u.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/pug2u.png" alt="enter image description here"></a>
  I don't like the first plot because the groups of points influence the density of adjacent groups of points and that prevents me from analyzing the distribution within a group. In other words, even if each of the 8 groups have exactly the same distribution, that won't be visible on the graph.</p>
  
  <p>I tried to modify the covariance_factor (like I once did for a 2d plot of density over x), but when gaussian_kde is used with multiple dimension arrays it returns a numpy.ndarray, not a "scipy.stats.kde.gaussian_kde" object. Plus, I don't even know if changing the covariance_factor will do it.</p>
  
  <p>Here's my dummy code :</p>
  
  <pre><code>import numpy as np
  import matplotlib.pyplot as plt
  from scipy.stats import gaussian_kde
  
  # Generate fake data
  a = np.random.normal(size=1000)
  b = np.random.normal(size=1000)
  
  # Data for the first image
  x = np.concatenate((a+10,a+10,a+20,a+20,a+30,a+30,a+40,a+40,a+80))
  y = np.concatenate((b+10,b-10,b+10,b-10,b+10,b-10,b+10,b-10,b*4))
  
  # Data for the second image
  #x = np.concatenate((a+10,a+10,a+20,a+20,a+30,a+30,a+40,a+40))
  #y = np.concatenate((b+10,b-10,b+10,b-10,b+10,b-10,b+10,b-10))
  
  # Calculate the point density
  xy = np.vstack([x,y])
  z = gaussian_kde(xy)(xy)
  
  # My unsuccesfull try to modify covariance which would work in 1D with "z = gaussian_kde(x)"
  #z.covariance_factor = lambda : 0.01
  #z._compute_covariance()
  
  # Sort the points by density, so that the densest points are plotted last
  idx = z.argsort()
  x, y, z = x[idx], y[idx], z[idx]
  
  fig, ax = plt.subplots()
  ax.scatter(x, y, c=z, s=50, edgecolor='')
  plt.show()
  </code></pre>
  
  <p>The solution could use an other density calculator, I don't mind.
  The goal is to make a density plot like the ones showed above, where I can play with the density parameters.</p>
  
  <p>I'm using python 3.4.3</p>