This script was derived from the original in order to address some GNUplot bugs: a missing title and two missing axis labels. And to add an Octave print function, which creates an SVG file. Alternatively, the gnuplot screen image has an export function that produces an SVG file, but the π characters aren't as professional-looking. I think the resultant quality produced by this script is now better than the file produced by the Python script.
graphics_toolkit gnuplot
clear all; close all; clc
hfig = figure("position",[100 100 509 509]);
x1 = .12; % left margin for name of Y-variable
x2 = .02; % right margin
y1 = .10; % bottom margin for ticks
y2 = .08; % top margin for title
dy = .08; % vertical space between rows
width = 1-x1-x2;
height= (1-y1-y2-dy)/2; % space allocated for each of 2 rows
x_origin = x1;
y_origin = 1; % start at top of graph area
%=======================================================
N= 256;
h = [1 1 1]/3; % impulse response
H = fftshift(fft(h,N)); % samples of DTFT
abscissa = (-N/2:N/2-1)*2*pi/N; % normalized frequency
% Specify the bins that are to show a negative amplitude
L = floor(N/6);
negate = [1+(0:L) N-(0:L-1)];
amplitude = abs(H);
amplitude(negate) = -amplitude(negate);
H(negate) = -H(negate); % compensate the phase of those bins
phase = angle(H);
%=======================================================
y_origin = y_origin -y2 -height; % position of top row
subplot("position",[x_origin y_origin width height])
plot(abscissa, amplitude, "linewidth", 2);
% Default xaxislocation is "bottom", which is where we want the tick labels.
% set(gca, "xaxislocation", "origin")
hold on
plot(abscissa, zeros(1,N), "color", "black") % draw x-axis
xlim([-pi pi])
ylim([-.4 1.2])
set(gca, "XTick", [-pi -2*pi/3 0 2*pi/3 pi])
set(gca, "YTick", [-.2 0 .2 .4 .6 .8 1])
grid("on")
ylabel("Amplitude")
% set(gca, "ticklabelinterpreter", "tex") % tex is the default
set(gca, "XTickLabel", ['-\pi'; '-2\pi/3'; '0'; '2\pi/3'; '\pi';])
set(gca, "YTickLabel", ['-.2'; '0'; '.2'; '.4'; '.6'; '.8'; '1';])
title("Frequency response of 3-term boxcar filter", "fontsize", 12)
%=======================================================
y_origin = y_origin -dy -height;
subplot("position",[x_origin y_origin width height])
plot(abscissa, phase, "linewidth", 2);
xlim([-pi pi])
ylim([-pi pi])
set(gca, "XTick", [-pi -2*pi/3 0 2*pi/3 pi])
set(gca, "YTick", [-pi -2 -1 0 1 2 pi])
grid("on")
xlabel('\leftarrow Frequency (\omega) (radians/sample) \rightarrow')
ylabel("Phase (radians)")
% set(gca, "ticklabelinterpreter", "tex") % tex is the default
set(gca, "XTickLabel", ['-\pi'; '-2\pi/3'; '0'; '2\pi/3'; '\pi';])
set(gca, "YTickLabel", ['-\pi'; '-2'; '-1'; '0'; '1'; '2'; '\pi';])
% The print function results in nicer-looking "pi" symbols
% than the export function on the GNUPlot figure toolbar.
print(hfig,"-dsvg", "-S509,509","-color", ...
'C:\Users\BobK\Amplitude & phase vs frequency for a 3-term boxcar filter.svg')