Re: [Matplotlib-users] Plotting curves filled with nonuniform color patch

2013-05-27 Thread John
http://matplotlib.1069221.n5.nabble.com/Plotting-curves-filled-with-nonuniform-color-patch-td25773.html

Raising an old thread here, but does anyone know how to make this work with
'fill_between'?
--
Try New Relic Now  We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app,  servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_may___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Plotting curves filled with nonuniform color patch

2009-12-03 Thread Jae-Joon Lee
line 1486 of _backend_agg.cpp says

  /* TODO: Support clip paths */

So, it seems that, apparently, clipping with arbitrary path has not
been implemented yet for gouraud shading (pcolormesh will be properly
clipped if shading is not used).
I hope Michael pick this up some time soon.

Meanwhile, you may open a feature request ticket on this.

Regards,

-JJ



On Wed, Dec 2, 2009 at 5:13 PM, Tony S Yu tsy...@gmail.com wrote:

 On Dec 2, 2009, at 3:53 PM, Tony S Yu wrote:

 Hi,

 I'm having hard time understanding some of the differences between functions 
 used to plot color patches (not sure what to call them).

 I'm trying to fill a curve with a nonuniform color patch (like fill or 
 fill_between but the color in the patch varies). I've attached code that 
 almost does what I want; my question concerns the color patch (which is 
 created by the call to plt.pcolor in the code below). I'd like to have 
 nonuniform grid spacing in the color values, and also shading (i.e. 
 interpolation of color between points). Here's what I understand:

 pcolor: allows nonuniform grid spacing, but it doesn't do shading.

 imshow: allows color shading, but requires uniform spacing

 pcolormesh: allows color interpolation and nonuniform grid spacing

 pcolormesh seems like the ideal candidate, but when I replace pcolor with 
 pcolormesh (code commented out below pcolor call), the path doesn't get 
 clipped by set_clip_path (but no errors are raised); in other words, the 
 color shading fills the entire plot area. Is this a bug?

 Is there a way of making this plot work that I've overlooked?

 Thanks!
 -Tony


 Nevermind, I found NonUniformImage after some digging. The working code is 
 attached below if anyone is interested.

 If anyone knows the answer, I'm still curious if the clipping behavior for 
 pcolormesh is a bug.

 Thanks,
 -Tony



 # example code

 import numpy as np
 import matplotlib.pyplot as plt
 from matplotlib.image import NonUniformImage


 def nonuniform_imshow(x, y, C, **kwargs):
    Plot image with nonuniform pixel spacing.

    This function is a convenience method for calling image.NonUniformImage.
    
    ax = plt.gca()
    im = NonUniformImage(ax, **kwargs)
    im.set_data(x, y, C)
    ax.images.append(im)
    return im


 def plot_filled_curve(x, y, c):
    Plot curve filled with linear color gradient

    Parameters
    --
    x, y : arrays
        points describing curve
    c : array
        color values underneath curve. Must match the lengths of `x` and `y`.
    
    # add end points so that fill extends to the x-axis
    x_closed = np.concatenate([x[:1], x, x[-1:]])
    y_closed = np.concatenate([[0], y, [0]])
    # fill between doesn't work here b/c it returns a PolyCollection, plus it
    # adds the lower half of the plot by adding a Rect with a border
    patch, = plt.fill(x_closed, y_closed, facecolor='none')
    im = nonuniform_imshow(x, [0, y.max()], np.vstack((c, c)),
                           interpolation='bilinear', cmap=plt.cm.gray)
    im.set_clip_path(patch)

 if __name__ == '__main__':
    line = np.linspace(0, 1, 6)
    x = np.hstack((line, [1, 2]))
    y = np.hstack((line**2, [1, 1]))
    c = np.hstack((line, [0, 0]))
    plot_filled_curve(x, y, c)
    plt.show()



 --
 Join us December 9, 2009 for the Red Hat Virtual Experience,
 a free event focused on virtualization and cloud computing.
 Attend in-depth sessions from your desk. Your couch. Anywhere.
 http://p.sf.net/sfu/redhat-sfdev2dev
 ___
 Matplotlib-users mailing list
 Matplotlib-users@lists.sourceforge.net
 https://lists.sourceforge.net/lists/listinfo/matplotlib-users


--
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Plotting curves filled with nonuniform color patch

2009-12-03 Thread Tony S Yu

On Dec 3, 2009, at 3:58 PM, Jae-Joon Lee wrote:

 line 1486 of _backend_agg.cpp says
 
  /* TODO: Support clip paths */
 
 So, it seems that, apparently, clipping with arbitrary path has not
 been implemented yet for gouraud shading (pcolormesh will be properly
 clipped if shading is not used).
 I hope Michael pick this up some time soon.
 
 Meanwhile, you may open a feature request ticket on this.
 
 Regards,
 
 -JJ


Hey Jae-Joon,

Thanks for digging into this. Feature request added.

By the way, I was looking through the feature requests and noticed an open 
feature request (ID: 2112292) that was satisfied by the addition of spines in 
the last major release. Just an FYI, if someone with privileges wants to close 
the request.

Thanks,
-Tony
--
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users


Re: [Matplotlib-users] Plotting curves filled with nonuniform color patch

2009-12-02 Thread Tony S Yu

On Dec 2, 2009, at 3:53 PM, Tony S Yu wrote:

 Hi,
 
 I'm having hard time understanding some of the differences between functions 
 used to plot color patches (not sure what to call them).
 
 I'm trying to fill a curve with a nonuniform color patch (like fill or 
 fill_between but the color in the patch varies). I've attached code that 
 almost does what I want; my question concerns the color patch (which is 
 created by the call to plt.pcolor in the code below). I'd like to have 
 nonuniform grid spacing in the color values, and also shading (i.e. 
 interpolation of color between points). Here's what I understand:
 
 pcolor: allows nonuniform grid spacing, but it doesn't do shading.
 
 imshow: allows color shading, but requires uniform spacing
 
 pcolormesh: allows color interpolation and nonuniform grid spacing
 
 pcolormesh seems like the ideal candidate, but when I replace pcolor with 
 pcolormesh (code commented out below pcolor call), the path doesn't get 
 clipped by set_clip_path (but no errors are raised); in other words, the 
 color shading fills the entire plot area. Is this a bug?
 
 Is there a way of making this plot work that I've overlooked?
 
 Thanks!
 -Tony


Nevermind, I found NonUniformImage after some digging. The working code is 
attached below if anyone is interested. 

If anyone knows the answer, I'm still curious if the clipping behavior for 
pcolormesh is a bug.

Thanks,
-Tony



# example code

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.image import NonUniformImage


def nonuniform_imshow(x, y, C, **kwargs):
Plot image with nonuniform pixel spacing.

This function is a convenience method for calling image.NonUniformImage.

ax = plt.gca()
im = NonUniformImage(ax, **kwargs)
im.set_data(x, y, C)
ax.images.append(im)
return im


def plot_filled_curve(x, y, c):
Plot curve filled with linear color gradient

Parameters
--
x, y : arrays
points describing curve
c : array
color values underneath curve. Must match the lengths of `x` and `y`.

# add end points so that fill extends to the x-axis
x_closed = np.concatenate([x[:1], x, x[-1:]])
y_closed = np.concatenate([[0], y, [0]])
# fill between doesn't work here b/c it returns a PolyCollection, plus it
# adds the lower half of the plot by adding a Rect with a border
patch, = plt.fill(x_closed, y_closed, facecolor='none')
im = nonuniform_imshow(x, [0, y.max()], np.vstack((c, c)), 
   interpolation='bilinear', cmap=plt.cm.gray)
im.set_clip_path(patch)

if __name__ == '__main__':
line = np.linspace(0, 1, 6)
x = np.hstack((line, [1, 2]))
y = np.hstack((line**2, [1, 1]))
c = np.hstack((line, [0, 0]))
plot_filled_curve(x, y, c)
plt.show()



--
Join us December 9, 2009 for the Red Hat Virtual Experience,
a free event focused on virtualization and cloud computing. 
Attend in-depth sessions from your desk. Your couch. Anywhere.
http://p.sf.net/sfu/redhat-sfdev2dev
___
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users