Is it possible to use tiledlayout to create a figure with plots and a PDF image? (per attachment)

51 vues (au cours des 30 derniers jours)
Is it possible to use tiledlayout to create a figure with plots and a PDF image (or other vector image)? (per attachment)
tiledlayout nexttile recognizes different "plot" commands. How would I get nexttile to recognize a PDF image as a plot? And then add a title to the image just like a plot title?
Or is there a bettery way to do this than using tiledlayout?

Réponse acceptée

Abhishek Kumar Singh
Abhishek Kumar Singh le 21 Mai 2024
Yes, it's possible to combine plots and vector images (such as PDF images) within a figure using tiledlayout and nexttile in MATLAB. While nexttile is primarily designed for plotting axes, you can still use it to display images by creating an axes object and then displaying the image within that axes.
Here's a general approach to achieve this:
  1. Use a custom MATLAB function extractImagePDF to extract images from a native PDF and save them as JPG files. Follow the MATLAB Answer for code and usage of the custom function at: https://www.mathworks.com/matlabcentral/answers/709623-how-can-i-convert-a-scanned-pdf-to-an-image-using-matlab.
  2. Create a tiled layout using tiledlayout.
  3. Use nexttile to create an axes for each plot or image.
  4. For plots, use standard plotting functions like plot, scatter, etc., to generate the desired plot in each axes.
  5. For images, use the imshow function to display the PDF image within the axes.
  6. Optionally, add titles to the plots and images using the title function.
Here's an example code snippet demonstrating this approach, after generating a JPG/PNG image:
% Define x values for the waves
x = linspace(0, 2*pi, 100);
% Create sine, cosine, and tangent waves
y1 = sin(x);
y2 = cos(x);
y3 = tan(x);
% Create tiled layout with 2 rows and 2 columns
tiledlayout(2, 2);
% Plot sine wave
nexttile;
plot(x, y1);
title('Sine Wave');
% Plot cosine wave
nexttile;
plot(x, y2);
title('Cosine Wave');
% Plot tangent wave
nexttile;
plot(x, y3);
title('Tangent Wave');
% Load and display an image of a cat
catImage = imread('cute_cat.jpg'); % Load cat image
nexttile;
imshow(catImage);
title('A Cute Cat');
% Adjust layout
tiledlayout.TileSpacing = 'compact';
tiledlayout.Padding = 'compact';
% Export the figure as a PDF
exportgraphics(gcf, 'plot_and_image.pdf', 'ContentType', 'vector');
This code will create a figure with three subplots displaying sine, cosine, and tangent waves, and a fourth subplot displaying the image of a cat. Finally, it will export the figure as a PDF named plot_and_image.pdf.
Hope it helps!

Plus de réponses (1)

Pratyush Swain
Pratyush Swain le 21 Mai 2024
Hi AP,
Using "tiledlayout" in MATLAB, you can create a figure that includes both plots and images.But MATLAB doesn't support PDF images for this purpose, you can leverage external tools to convert pdf to an image format (such as PNG/JPG) and then display it using the "imshow" or "imagesc" function within the "tiledlayout"
% Create a tiled layout
t = tiledlayout(2,2);
% Plot exapin the first three tiles
nexttile;
plot(rand(10,1));
title('MATLAB Plot');
nexttile;
plot(sin(1:0.1:10));
title('MATLAB Plot');
nexttile;
plot(cos(1:0.1:10));
title('MATLAB Plot');
% Display an image in the fourth tile
nexttile;
% Read the converted PDF image
img = imread('path to your image');
imagesc(img);
% You can add a title too
title('Image Plot');
I tried the implementation with a demo image and this was the output:
For more information on nexttile, you can refer to https://www.mathworks.com/help/matlab/ref/nexttile.html
Hope this helps.

Produits


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by