Plotting 3 lines with different x values in one single plot?
显示 更早的评论
Hi, I have data of absorbtion spectra of three different materials and I need to plot all of them on the same plot. The problem is that the X for each one isn't the same. For all of them the X axis is the wavelength but in one material this value jumps in 2 and in other it jumps in 25. This means that the wavelength (x value) of each material has a different length and not precisly the same values. However, I need all of them in one plot as in the following image:

My idea is to create a loop that eliminates the wavelengths that not match between the three materials (three vectros) but I don't know how to do it.
Thank you :)
回答(1 个)
Star Strider
2020-4-18
Example —
x1 = sort(rand(1,10));
y1 = rand(size(x1));
x2 = sort(rand(1,27));
y2 = rand(size(x2));
figure
plot(x1, y1)
hold on
plot(x2, y2)
hold off
grid
.
12 个评论
undefined undefined
2020-4-18
Star Strider
2020-4-18
编辑:Star Strider
2020-4-18
I also get nothing because I do not have those matrices to experiment with.
If I did, I might be able to do something with them, or at least figure out what the problem is.
EDIT —
Use the save function to save the matrices to a .mat file and use the paperclip icon to upload it here.
.
undefined undefined
2020-4-18
Star Strider
2020-4-18
My pleasure.
The plot code works, however the linear axes do not.
Using the code you posted (that I will not re-post here) reveals that the variable dimensions are such that it is necessary to plot them on loglog axes:
figure
loglog(x1, y1)
hold on
plot(x2, y2)
hold off
grid
legend('\epsilon', 'H_2O')
producing:

That is the best I can do with your data to produce the plot. (On a linear scale, ‘epsilon’ plots as a vertical line on the left axis, and ‘water’ plots as a horizontal line in the lower axis. They are both present, although invisible for all practical purposes.)
.
undefined undefined
2020-4-19
Star Strider
2020-4-19
That may not be possible, since those two vectors are different lengths.
You might be able to use the interp1 function to interpolate them so that ‘Total’ to to the correct length for the appropriate ‘X’ value ( that may require interpolating ‘Total’ again), however I would have to know more in order to be certain.
Note that interpolation creates data that were not in the original data, and while this may be appropriate in some situations, it would not be in every situation. Be very careful with that.
undefined undefined
2020-4-19
编辑:undefined undefined
2020-4-19
Star Strider
2020-4-19
I cannot determine what you want to do.
The ‘Hemoglobin’ variable is a (376x3) table.
The ‘water’ variable is a (231x2) table.
It is not possible to add these tables together, or do any other element-wise opearations on them. They have different sizes.
It is not possible to add individual columns from them together. They have different lengths.
Exactly what vectors do you want to combine?
How do you want to combine them?
What vector do you want to plot them against?
Note that none of this may be possible without severely distorting the data. That would make any calculations you do with the distorted data unreliable (and unpublishable, if that is your intent).
undefined undefined
2020-4-20
Star Strider
2020-4-20
Please be more specific.
‘Y1 is th Hemoglobin after merging two columns, so Hemoglobin is now (376x2).’
What does ‘merge’ mean?
What is ‘Y2’?
What are the new variables?
How are they calculated?
What do you want to do with them?
Posting the relevant parts of your code that creates the variables would definitely help.
.
undefined undefined
2020-4-21
Star Strider
2020-4-21
I still have no idea what you want to do.
Try this:
y3 = interp1(x1, y1, x2, 'linear','extrap');
figure
loglog(x1, y1)
hold on
plot(x2, y2)
plot(x2, y2+y3)
hold off
grid
legend('\epsilon', 'H_2O', 'y_2+y_3')
.
类别
在 帮助中心 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

