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

35 views (last 30 days)
AP on 21 May 2024
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?

Abhishek Kumar Singh on 21 May 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
nexttile;
imshow(catImage);
title('A Cute Cat');
tiledlayout.TileSpacing = '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!

Pratyush Swain on 21 May 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
imagesc(img);
% You can add a title too
title('Image Plot');
I tried the implementation with a demo image and this was the output:
Hope this helps.

### Categories

Find more on Lighting, Transparency, and Shading in Help Center and File Exchange

R2023a

### Community Treasure Hunt

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

Start Hunting!