Finding where two histograms cross paths - MATLAB
I am generating two histograms using the histogram function from Matlab that are both normalized using the probability
argument.
However, once I generate two histograms as shown below, I'd like to be able to find the exact point at which the histograms would cross paths, assuming the histograms were drawn using lines instead of bars. Unfortunately, this form of histogram doesn't allow for lines, it just has bars. There is a hist
function which can be manipulated in Matlab to draw a histogram as lines instead of bars, however, it doesn't easily normalize.
Hence, ideally, I'd like to use histogram()
to plot the 2 histograms and find where they cross. See image below:
Here's an example of how the graphs can be created:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
Now from here, I want to find the point where the two histograms cross paths. Note, the intersection value is the intersection (in the mathematical sense). This is not what I'm looking for. I'm looking for the x coordinate of where the two histograms cross at their outer boundaries. For example, in the attached image, the answer would be ~2.5.
matlab histogram
add a comment |
I am generating two histograms using the histogram function from Matlab that are both normalized using the probability
argument.
However, once I generate two histograms as shown below, I'd like to be able to find the exact point at which the histograms would cross paths, assuming the histograms were drawn using lines instead of bars. Unfortunately, this form of histogram doesn't allow for lines, it just has bars. There is a hist
function which can be manipulated in Matlab to draw a histogram as lines instead of bars, however, it doesn't easily normalize.
Hence, ideally, I'd like to use histogram()
to plot the 2 histograms and find where they cross. See image below:
Here's an example of how the graphs can be created:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
Now from here, I want to find the point where the two histograms cross paths. Note, the intersection value is the intersection (in the mathematical sense). This is not what I'm looking for. I'm looking for the x coordinate of where the two histograms cross at their outer boundaries. For example, in the attached image, the answer would be ~2.5.
matlab histogram
1
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
1
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
1
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46
add a comment |
I am generating two histograms using the histogram function from Matlab that are both normalized using the probability
argument.
However, once I generate two histograms as shown below, I'd like to be able to find the exact point at which the histograms would cross paths, assuming the histograms were drawn using lines instead of bars. Unfortunately, this form of histogram doesn't allow for lines, it just has bars. There is a hist
function which can be manipulated in Matlab to draw a histogram as lines instead of bars, however, it doesn't easily normalize.
Hence, ideally, I'd like to use histogram()
to plot the 2 histograms and find where they cross. See image below:
Here's an example of how the graphs can be created:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
Now from here, I want to find the point where the two histograms cross paths. Note, the intersection value is the intersection (in the mathematical sense). This is not what I'm looking for. I'm looking for the x coordinate of where the two histograms cross at their outer boundaries. For example, in the attached image, the answer would be ~2.5.
matlab histogram
I am generating two histograms using the histogram function from Matlab that are both normalized using the probability
argument.
However, once I generate two histograms as shown below, I'd like to be able to find the exact point at which the histograms would cross paths, assuming the histograms were drawn using lines instead of bars. Unfortunately, this form of histogram doesn't allow for lines, it just has bars. There is a hist
function which can be manipulated in Matlab to draw a histogram as lines instead of bars, however, it doesn't easily normalize.
Hence, ideally, I'd like to use histogram()
to plot the 2 histograms and find where they cross. See image below:
Here's an example of how the graphs can be created:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
Now from here, I want to find the point where the two histograms cross paths. Note, the intersection value is the intersection (in the mathematical sense). This is not what I'm looking for. I'm looking for the x coordinate of where the two histograms cross at their outer boundaries. For example, in the attached image, the answer would be ~2.5.
matlab histogram
matlab histogram
edited Nov 21 '18 at 19:45
Jonathan
asked Nov 21 '18 at 8:41
JonathanJonathan
422122
422122
1
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
1
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
1
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46
add a comment |
1
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
1
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
1
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46
1
1
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
1
1
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
1
1
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46
add a comment |
1 Answer
1
active
oldest
votes
From your example data, with a simple modification:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is betweendata2(intersection_value-1)
anddata2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408138%2ffinding-where-two-histograms-cross-paths-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
From your example data, with a simple modification:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is betweendata2(intersection_value-1)
anddata2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
add a comment |
From your example data, with a simple modification:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is betweendata2(intersection_value-1)
anddata2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
add a comment |
From your example data, with a simple modification:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
From your example data, with a simple modification:
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x);
hold on
h2 = histogram(y);
h1.Normalization = 'probability';
h1.BinWidth = 0.25;
h1.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
h2.Normalization = 'probability';
h2.BinWidth = 0.25;
h2.BinLimits=[min([x(:); y(:)]) max([x(:); y(:)])];
data1=h1.Values;
data2=h2.Values;
intersection_value=find(data2>data1,1); % this is the index, bad variable name
edited Nov 22 '18 at 11:10
answered Nov 21 '18 at 18:36
Ander BiguriAnder Biguri
26.2k105491
26.2k105491
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is betweendata2(intersection_value-1)
anddata2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
add a comment |
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is betweendata2(intersection_value-1)
anddata2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
Hmm, this gives me a different answer than expected. When I ran this, I get an intersection value of ~15 everytime. However, the paths clearly cross [0,1]. I've updated my answer to make this more clear.
– Jonathan
Nov 21 '18 at 19:46
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is between
data2(intersection_value-1)
and data2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
@Jonathan the intersection is the index, not the value. Perhaps I mislead you with the variable name. The intersected value is between
data2(intersection_value-1)
and data2(intersection_value)
– Ander Biguri
Nov 21 '18 at 23:15
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
Would be interesting to see the plot
– kkuilla
Nov 22 '18 at 14:00
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
@kkuilla the plot is almost the same of what OP gave, just with ensured bin overlap. The answer is just and index so not plotable.
– Ander Biguri
Nov 22 '18 at 14:37
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53408138%2ffinding-where-two-histograms-cross-paths-matlab%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
If the bars are the same width and centered in the same values then its relatively eas, just iterate over all bars and compare them to their matching. Otherwise, you are in "very long code, you need to try something yourself before asking" waters. Can you show a Minimal, Complete, and Verifiable example of how you generate these histograms?
– Ander Biguri
Nov 21 '18 at 9:50
1
And how do you get intersection at 0.66? x-axis is 2.something and y-axis 0.27ish.
– kkuilla
Nov 21 '18 at 9:57
@kkuilla ignore the intersection value. Thats the intersection of the two histograms, not the point at which the lines cross, if that makes sense.
– Jonathan
Nov 21 '18 at 17:42
1
@AnderBiguri I've added some code, does this help?
– Jonathan
Nov 21 '18 at 17:46