14 views (last 30 days)

Show older comments

Hi,

I have plotted two graphs and both have different x and y axis as:

xlabels{1} = 'DEN (gm/cm3)';

xlabels{2} = 'NPHI(.frac)';

ylabels{1} = 'Depth(m)';

ylabels{2} = 'Depth(m)';

[ax,hlT,hlS] = plotxx(DEN,Depth,NEU,Depth,xlabels,ylabels);

Now I want to shade/fill (with yellow color) only area where both graphs are overlapping (depth 1917 - 1967) in the attached figure. How I can do it?

Star Strider
on 28 Jul 2021

I honestly have no desire to download ‘plotxx’ and learn its intricacies, so I used yyaxis instead here.

The same approach should apply with ‘plotxx’, although I did not do that test:

LD = load('data.mat');

DEN = LD.DEN2;

Depth = LD.Depth2;

NEU = LD.NEU2;

Mv = (Depth >= 1917) & (Depth <= 1967); % Logical ‘Mask’ Vector (Change Dates As Necessary)

figure

yyaxis left

plot(Depth, DEN)

Lyl = ylim; % Left ‘yyaxis’ Limits

ylabel('DEN')

yyaxis right

plot(Depth, NEU)

Ryl = ylim; % Right ‘yyaxis’ Limits

ylabel('NEU')

LRB = [Lyl(:) [1;1]] \ Ryl(:); % Linear Scaling Parameters

hold on

DENR = [DEN ones(size(DEN))] * LRB; % Scale ‘DEN’ To ‘yyaxis right’

patch([Depth(Mv); flipud(Depth(Mv))], [NEU(Mv); flipud(DENR(Mv))], [1 1 1]*0.8, 'EdgeColor','none') % Plot Scaled ‘DEN’ & Fill

hold off

xlabel('Depth')

producing:

This was a bit of a challenge, since it required scaling the ‘DEN’ vector to the yyaxis right limits. That is actually straightforward using a simple linear regression (the ‘LRB’ calculation), then applying it (the ‘DENR’ for ‘DEN Right’ calculation), with ‘DEN’ originally plotted with yyaxis left.

This gave me the opportunity to figure out how to do that, so thank you for posing the probllem!

.

Image Analyst
on 27 Jul 2021

The code in the FAQ will need to be modified slightly for your data:

If you can't figure it out, attach your data in a text or mat file.

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!