# One plot with different density functions in different regions?

As you can see in the following photo, there are 4 regions in the photo. Each photo has a different density function $$T_i$$.

For ① $$T_1=223+380 x+385y$$

For ② $$T_2=446+1080x+450y$$

For ③ $$T_3=108+4460x+450y;$$

For ④ $$T_4=198+4010x$$

Now I want to plot the density plot of the entire image?

The method I am using is to merge $$T_i$$ to one $$T$$ with bool operator. Here is the code:

T1=223+380 x+385y;
T2=446+1080x+450y;
T3=108+4460x+450y;
T4=198+4010x;

DensityPlot[
T1*Boole[x>=0&&y<=0.1&&(x-y<=0)]+
T2*Boole[x<=0.10&&y>=0&&(x-y>=0)]+
T3*Boole[x>=0.1&&y>=0&&(x+y<0.2)]+
T4*Boole[x<=0.2&&y<=0.1&&x+y>=0.2],{x,0,0.2},
{y,0,0.1},
PlotPoints->100,AspectRatio->1/2,ImageSize->Medium]


The result is

I am a Mathematica newbie and I confirm there is better code for this problem. I've tried PlotRange & RegionFunction but had no idea how to do.

Basically equivalent but more elegant than your solution:

f1[x_, y_] := 223 + 380 x + 385 y;
f2[x_, y_] := 446 + 1080 x + 450 y;
f3[x_, y_] := 108 + 4460 x + 450 y;
f4[x_, y_] := 198 + 4010 x;

DensityPlot[
Which[
y > x, f1[x, y],
y < x < .1, f2[x, y],
.1 < x < .2 - y, f3[x, y],
y > .2 - x, f4[x, y]],
{x, 0, .2}, {y, 0, .1},
PlotLegends ->Automatic,
AspectRatio -> 1/2]


• Thanks, I think using Which is much better. – Vold Notz Jun 24 at 0:26

An alternative approach: (1) Construct a list of functions (functions) from your {T1, ..., T4}, (2) make a boolean list of from your conditions (boole), (3) use Dot[boole, Through @ functions[x,y]] as the first argument of DensityPlot:

functions = Function[{x, y}, #] & /@ {T1, T2, T3, T4};
boole = Boole @ {y > x, y < x < .1, .1 < x < .2 - y, y > .2 - x};

DensityPlot[boole.Through[functions[x, y]],
{x, 0, .2}, {y, 0, .1},
PlotLegends -> Automatic, AspectRatio -> 1/2]


Add the option ExclusionsStyle -> Red to emphasize the region boundaries:

• Thank for your solution! I don't know about Through and I am going to check it in the help. – Vold Notz Jun 24 at 0:28

I prefer using Piecewise instead of Which, Boole, etc. because Piecewise has better support in mathematical operations.

T1 = 223 + 380 x + 385 y;
T2 = 446 + 1080 x + 450 y;
T3 = 108 + 4460 x + 450 y;
T4 = 198 + 4010 x;

P = DensityPlot[
Piecewise[{{T1, x >= 0 && y <= 0.1 && (x - y <= 0)},
{T2, x <= 0.10 && y >= 0 && (x - y >= 0)},
{T3, x >= 0.1 && y >= 0 && (x + y < 0.2)},
{T4, x <= 0.2 && y <= 0.1 && x + y >= 0.2}}],
{x, 0, 0.2}, {y, 0, 0.1},
PlotPoints -> 100, AspectRatio -> 1/2, ImageSize -> Medium,
PlotLegends -> Automatic, PlotRange -> All]


• Thanks, Piecewise is indeed better. I always use it in two variables problem, your solution is enlightening. – Vold Notz Jun 24 at 23:07