MATLAB Answers

How to overlay a log-plot on top of an image

13 views (last 30 days)
Knut
Knut on 26 Mar 2013
Commented: Scott Webster on 19 Feb 2015
Here is the use-case: You have access to an image of a MATLAB semilogx() plot from a paper, a website or something similar. The original data are not easily available. You want to manually approximate the original vector. If one could overlay a local MATLAB semilogx() plot on top of the figure, that would make the tedious job slightly less tedious.

  1 Comment

Scott Webster
Scott Webster on 19 Feb 2015
If I'm understanding what you are trying to do correctly, you might want to considering using alternative tools to get at the data, several of which exist, e.g.

Sign in to comment.

Accepted Answer

Knut
Knut on 26 Mar 2013
Edited: Knut on 26 Mar 2013
Here is my suggested solution. Nothing ground-breaking, but a bit fiddly for my skills using axes.
%%generate some trivial data
[b1,a1] = butter(2,1200./48e3);
[b2,a2] = butter(2,1200./48e3,'high');
H1 = freqz(b1,a1,512,48e3);
H2 = freqz(b2,a2,512,48e3);
im = imread('ngc6543a.jpg');
%%do the actual plotting
figure
%define plot extent so that image can be aligned with plot
xrng = [20 30e3]./1000;
yrng = [-60 10];
image(xrng,yrng,im);
ax1 = gca;
%get rid of pixel ticklabels
set(ax1,'YTickLabel', [], 'XTickLabel', [])
%color=none to make the image visible
ax2 = axes('Position',get(ax1,'Position'),'Color','none','XScale', 'log');
ylim(yrng)
xlim(xrng)
xlabel('Frequency - kHz')
ylabel('power - dB')
title('Frequency response')
line(W, 20*log10(abs([H1 H2])),'Parent',ax2);
legend('lopass', 'hipass')
Inspired by:

  2 Comments

Stanley Kubrick
Stanley Kubrick on 19 Feb 2015
I've actually just resorted to taking screenshots and overlaying it manually like this:
Star Strider
Star Strider on 19 Feb 2015
@Stanley Kubrick — You should probably post that also as a Comment to your post Semilog plot with background image.

Sign in to comment.

More Answers (0)

Sign in to answer this question.