How to set an image as background for plot and display it in existing GUI?

137 ビュー (過去 30 日間)
Henning
Henning 2022 年 12 月 29 日
コメント済み: Image Analyst 2022 年 12 月 30 日
In my application, on a click of a button a plot with an background image should be plotted and displayed in the same window. To do so, I create some UIAxes in my App:
app.UIAxes = uiaxes(app.GridLayout);
app.UIAxes.Layout.Row = 5;
app.UIAxes.Layout.Column = 3;
After the button is clicked I plot the diagram in the already existing (but empty) UIAxes:
plot(points(:,1), points(:,2), 'r.-', 'LineWidth', 2, 'Parent', app.UIAxes);
That works so far, but I am not able to put the image in the background. I know from a previous question, that I can display the picture and plot the points over it like this:
imshow(image);
hold on
axis('on', 'image')
plot(points(:,1), points(:,2), 'r.-', 'LineWidth', 2, 'MarkerSize', 30);
This soultion is great, because my plot is in the imagesize and everything fits. But this solution opens a new window and I want to render it into the current GUI. I also tried to use Image instead of UIAxes and set the Image with:
app.Image.ImageSource = image;
But then I don't know how to plot the graph in it.

採用された回答

Cameron
Cameron 2022 年 12 月 29 日
This link seems like what you're looking for.
  2 件のコメント
Henning
Henning 2022 年 12 月 29 日
actually not. I need to attach it to some existing UI component such as UIAxes or Image. In the solution of your link it always opens the image in a new window
Cameron
Cameron 2022 年 12 月 30 日
Try this
img = 'thumbnail.jpg'; %your file name
I = imread(img);
x = 0:0.1:7; %x vector
y = rand(length(x),1); %random y vector
hold(app.UIAxes,'on') %hold your uiaxes
%input your image. the [0 7] and [1 0] are taken from the x and y data.
%adjust as needed
image(app.UIAxes,[0 7],[1 0],I);
plot(app.UIAxes,x,y,'-o') %plot
hold(app.UIAxes,'off')
axis(app.UIAxes,'tight')
You can adjust this as required.

サインインしてコメントする。

その他の回答 (1 件)

Image Analyst
Image Analyst 2022 年 12 月 29 日
Do you mean like this:
grayImage = imread('moon.tif');
[rows, columns, numberOfColorchannels] = size(grayImage)
rows = 537
columns = 358
numberOfColorchannels = 1
imshow(grayImage);
axis xy
x = 1 : columns;
period = 64;
y = 100 * sin(2 * pi * x / period) + rows/2;
hold on;
plot(x, y, 'r-', 'LineWidth', 2)
yline(rows/2, 'LineWidth', 2, 'Color', 'c')
axis('on')
Other demos are attached.
  6 件のコメント
Henning
Henning 2022 年 12 月 30 日
@Les Beckham That works perfect, thanks!
Image Analyst
Image Analyst 2022 年 12 月 30 日
If this Answer solves your original question, then could you please click the "Accept this answer" link to award the answerer with "reputation points" for their efforts in helping you? They'd appreciate it. Thanks in advance. 🙂 Note: you can only accept one answer (so pick the best one) but you can click the "Vote" icon for as many Answers as you want. Voting for an answer will also award reputation points.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSpecifying Target for Graphics Output についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by