In [ ]:
%matplotlib inline
import skrf as rf
rf.stylely()
Plotting functions are implemented as methods of the Network
class.
Network.plot_s_re
Network.plot_s_im
Network.plot_s_mag
Network.plot_s_db
Similar methods exist for Impedance (Network.z
) and Admittance Parameters (Network.y
),
Network.plot_z_re
Network.plot_z_im
Network.plot_y_re
Network.plot_y_im
As a first example, load a Network and plot all four s-parameters on the Smith chart.
In [ ]:
from skrf import Network
ring_slot = Network('data/ring slot.s2p')
ring_slot.plot_s_smith()
In [ ]:
ring_slot.plot_s_smith(draw_labels=True)
Another common option is to draw addmitance contours, instead of impedance. This is controled through the chart_type
argument.
In [ ]:
ring_slot.plot_s_smith(chart_type='y')
In [ ]:
ring_slot.plot_s_complex()
from matplotlib import pyplot as plt
plt.axis('equal') # otherwise circles wont be circles
In [ ]:
ring_slot.plot_s_db()
When no arguments are passed to the plotting methods, all parameters are plotted. Single parameters can be plotted by passing indices m
and n
to the plotting commands (indexing start from 0). Comparing the simulated reflection coefficient off the ring slot to a measurement,
In [ ]:
from skrf.data import ring_slot_meas
ring_slot.plot_s_db(m=0,n=0, label='Theory')
ring_slot_meas.plot_s_db(m=0,n=0, label='Measurement')
In [ ]:
ring_slot.plot_s_deg()
Or unwrapped phase,
In [ ]:
ring_slot.plot_s_deg_unwrap()
Phase is radian (rad) is also available
A Network has a plot()
method which creates a rectangular plot of the argument vs frequency. This can be used to make plots are arent 'canned'. For example group delay
In [ ]:
gd = abs(ring_slot.s21.group_delay) *1e9 # in ns
ring_slot.plot(gd)
plt.ylabel('Group Delay (ns)')
plt.title('Group Delay of Ring Slot S21')
In [ ]:
ring_slot.plot_z_im()
In [ ]:
ring_slot.plot_y_im()
In [ ]:
ring_slot.plot_s_db(m=0,n=0, label = 'Simulation')
The frequency unit used on the x-axis is automatically filled in from
the Networks Network.frequency.unit
attribute. To change
the label, change the frequency's unit
.
In [ ]:
ring_slot.frequency.unit = 'mhz'
ring_slot.plot_s_db(0,0)
Other key word arguments given to the plotting methods are passed through to the matplotlib matplotlib.pyplot.plot
function.
In [ ]:
ring_slot.frequency.unit='ghz'
ring_slot.plot_s_db(m=0,n=0, linewidth = 3, linestyle = '--', label = 'Simulation')
ring_slot_meas.plot_s_db(m=0,n=0, marker = 'o', markevery = 10,label = 'Measured')
All components of the plots can be customized through matplotlib functions, and styles
can be used with a context manager.
In [ ]:
from matplotlib import pyplot as plt
from matplotlib import style
with style.context('seaborn-ticks'):
ring_slot.plot_s_smith()
plt.xlabel('Real Part');
plt.ylabel('Imaginary Part');
plt.title('Smith Chart With Legend Room');
plt.axis([-1.1,2.1,-1.1,1.1])
plt.legend(loc=5)
Plots can be saved in various file formats using the GUI provided by the matplotlib. However, skrf provides a convenience function, called skrf.plotting.save_all_figs
, that allows all open figures to be saved to disk in multiple file formats, with filenames pulled from each figure's title,
from skrf.plotting import save_all_figs
save_all_figs('data/', format=['png','eps','pdf'])
In [ ]:
from skrf import plotting
with style.context('printable'):
ring_slot.plot_s_deg()
plotting.add_markers_to_lines()
plt.legend() # have to re-generate legend