# How to put several 2D lines in a 3D grayscale plot

It is sometimes convenient to display several 2D curves on one 3D graph and choose gray-scale colors so that the printed version of the figure is readable. The following Matlab code (an example of a loudspeaker’s low-frequencies pressure outputs for different quality factors $Q_{ts}$) shows how to do it.

clc; close all; clearvars f = 10:10:500; % frequency axis w0 = 2*pi*200; % angular frequency Qts = 1:0.5:4; % different Qts for k=1:length(Qts) % calculate the relative pressure at low frequencies P(k,:) = 10*w0.*(1i*2*pi*f).^2./((1i*2*pi*f).^2 + (w0/Qts(k))*(1i*2*pi*f) + w0^2); end %% prepare 3D figure figure; [F,Y] = meshgrid(f,Qts); % prepare the X-Y grid c1 = linspace(0.5,1,length(Qts)); % prepare colors (grayscales) c2 = linspace(0.1,0.5,length(Qts)); % prepare edge-colors (grayscales) %% PLOT 3D figure for kk=1:length(Qts) % prepare empty matrix of NaN (Not-a-Number) PtotX = NaN(size(P)); % set only the current curve to be plotted (for a given position rx(k)) PtotX(kk,:) = P(kk,:); % plot the curve in 3D and save its handles to "h" h(kk) = waterfall(F,Y,20*log10(abs(PtotX))); hold all % modify colors by handles "h" set(h(kk), 'FaceColor', c1(kk)*[1 1 1]); set(h(kk),'EdgeColor',c2(kk)*[1 1 1]); end xlabel('Frequency [Hz]'); ylabel('Qts [-]'); zlabel('Sound Pressure Level [dB SPL]'); zlim([60 100]); % set limits of the z-axis %% following modifications can be applied % set(gca,'YDir','reverse') % flip the y-axis % set(gca,'View',[-45 40]) % change the camera view