multiple region_plots in one plot

i like this post (click again to cancel)
2
i dont like this post (click again to cancel)

Hi, I want to plot two region_plots into one plot. The idea is if you use different colors for the inequalities you can see how the regions change. A minimal example:

var('x,y')
plot1=region_plot(x<y,(x,0,1),(y,0,1),incol='red')
plot2=region_plot(2*x<y,(x,0,1),(y,0,1),incol='blue')
show(plot2+plot1)

I do not know how to manage this, since zorder or opacity are not working for region_plot. Does anybody know how to make this work (by the way I use sagenb.org)? Thanks in advance

asked Mar 15 '12

god.one gravatar image god.one flag of Germany
213 2 6 16

Just for reference, plot1+plot2 gives a different (also not so useful) plot.

kcrisman (Mar 15 '12)

@kcrisman : ok, but could you please explain what you mean with <not so useful plot>?

god.one (Mar 15 '12)

I suspect we are using contourf inappropriately with two patches - Jason Grout, any ideas?. Possibly related are http://www.mailinglistarchive.com/html/matplotlib-users@lists.sourceforge.net/2010-04/msg00168.html and http://old.nabble.com/contourf-creats-white-like-lines-%28or-gaps%29-between-each-two-color-patches-td27982822.html#a28210898

kcrisman (Mar 15 '12)
1

By not-so-useful I just mean that it seems to have a similar problem to your original one, but with the opposite region "on top". It was just a comment, not an answer of any kind!

kcrisman (Mar 15 '12)
i like this answer (click again to cancel)
4
i dont like this answer (click again to cancel) god.one has selected this answer as correct

The problem is that a region_plot is really just a contour plot with exactly two colored regions. The "inside" color is determined by incolor, and the "outside" is determined by outcolor. Now here's the key: outcolor is white by default, so you might think that the outside of the region is transparent. But it's not. That explains why you only see one of the two plots -- the top one is completely opaque, thus covering the bottom one. This also explains why you get different results when you sum the two plots in different orders -- this changes which one is on top.

Now here's a fix: just use contour_plot directly. To do this, define a function which will separate the regions you're interested in. For example:

def sep(x,y):
    if 2*x < y:
        return 1
    if x < y and y <= 2*x:
        return 0
    if y <= x:
        return -1

Now make the contour plot, choosing contour lines between your separate outputs, and listing the colors you want:

contour_plot(sep, (x,0,2), (y,0,2), plot_points=400, contours=[-.5,.5], cmap=['white','red','blue'])

image description

Also note that contour_plot will probably work pretty well without you explicitly specifying the contours or the colors, if you don't want to worry about that step.

link

posted Mar 16 '12

niles gravatar image niles
3429 5 41 94
http://nilesjohnson.net/

updated Mar 16 '12

Ah, of course! I don't know why I didn't see that, having worked on this code in the past... Great work.

kcrisman (Mar 16 '12)

So do you think this is worth a trac ticket? I feel like we would really want the original thing to work. But I'm not sure exactly how to do this without removing the 'white' business, which would make the graphics look weird, if I recall correctly.

kcrisman (Mar 16 '12)

this could be a feature request: allow region_plot to color multiple regions. But I don't think I'm motivated enough to open a ticket for it.

niles (Mar 17 '12)

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!
[hide preview]

Question tools

Tags:

Stats:

Asked: Mar 15 '12

Seen: 108 times

Last updated: Mar 16 '12

powered by ASKBOT version 0.7.22
Copyright Sage, 2010. Some rights reserved under creative commons license.