This page was generated from docs/examples/DataSet/Offline plotting with complex data.ipynb. Interactive online version: .

# Offline plotting with complex data

This notebook is a collection of plotting examples using the plot_dataset function and complex data. We cover the cases where the dependent (measured) parameter is complex, and the case where the independent parameter is complex.

The behavior of the plot_dataset with respect to compex-valued parameters is as follows: one complex-valued parameter is converted into two real-valued parameters.

We start by initialising our database and creating an experiment.

[1]:

%matplotlib inline
import numpy as np

from qcodes import Measurement, initialise_database, load_or_create_experiment
from qcodes.dataset.plotting import plot_dataset

[2]:

initialise_database()


## Case A: a complex number as a function of a real number

Now, we are ready to perform a measurement. To this end, let us register our custom parameters.

[3]:

meas_A = Measurement(exp)
meas_A.register_custom_parameter(name='freqs',
label='Frequency',
unit='Hz',
paramtype='numeric')
meas_A.register_custom_parameter(name='iandq',
label='Signal I and Q',
unit='V^2/Hz',
paramtype='complex',
setpoints=['freqs'])

[3]:

<qcodes.dataset.measurements.Measurement at 0x7f502086ba00>

[4]:

N = 1000
freqs = np.linspace(0, 1e6, N)
signal = np.cos(2*np.pi*1e-6*freqs) + 1j*np.sin(2*np.pi*1e-6*freqs)

with meas_A.run() as datasaver:

ds = datasaver.dataset

Starting experimental run with id: 28.


When visualising the data, the plot_dataset will turn the complex signal parameter into to real parameters. The plot_dataset function can do this “transformation” in one of two ways: either casting the amplitudes of the real and imaginary parts or calculating the magnitude and phase. By default, the plot_dataset uses the former.

[5]:

axs, cbs = plot_dataset(ds)

[6]:

axs, cbs = plot_dataset(ds, complex_plot_type='mag_and_phase')


Note that the phase can be visualized either in degrees or in radians. The keyword argument complex_plot_phase of the plot_dataset function controls this behaviour. The default is radians.

[7]:

axs, cbs = plot_dataset(ds,
complex_plot_type='mag_and_phase',
complex_plot_phase='degrees')


## Case B: a complex number as a function of two real numbers

[8]:

meas_B = Measurement(exp)
meas_B.register_custom_parameter(name='freqs',
label='Frequency',
unit='Hz',
paramtype='numeric')
meas_B.register_custom_parameter(name='magfield',
label='Magnetic field',
unit='T',
paramtype='numeric')
meas_B.register_custom_parameter(name='iandq',
label='Signal I and Q',
unit='V^2/Hz',
paramtype='complex',
setpoints=['freqs', 'magfield'])

[8]:

<qcodes.dataset.measurements.Measurement at 0x7f4fe68d6790>

[9]:

N = 250
M = 20
freqs = np.linspace(0, 1e6, N)
fields = np.linspace(0, 2, M)

with meas_B.run() as datasaver:
for field in fields:
phis = 2*np.pi*field*1e-6*freqs
signal = np.cos(phis) + 1j*np.sin(phis)
('magfield', field))

run_B_id = datasaver.run_id
ds2 = datasaver.dataset

Starting experimental run with id: 29.


When visualising this run, we get two plots just as in the previous case. This time, however, the plots are heatmaps and not line plots.

[10]:

axs, cbs = plot_dataset(ds2, complex_plot_type='real_and_imag')

[11]:

axs, cbs = plot_dataset(ds2, complex_plot_type='mag_and_phase')


## Case C: a real number as a function of a complex number

As expected, the single complex setpoint parameter is turned into two real-valued setpoint parameters.

[12]:

meas_C = Measurement(exp)
meas_C.register_custom_parameter(name='iandq',
label='Signal I and Q',
unit='V^2/Hz',
paramtype='complex')
meas_C.register_custom_parameter(name='temp',
label='Temperature',
unit='K',
paramtype='numeric',
setpoints=['iandq'])

[12]:

<qcodes.dataset.measurements.Measurement at 0x7f4fe67ff7f0>

[13]:

N = 250
phis = 2*np.pi*np.linspace(1e-9, 1, N)
signal = phis**2*(np.cos(phis) + 1j*np.sin(phis))
heat = np.abs(signal)

with meas_C.run() as datasaver:

run_C_id = datasaver.run_id
ds3 = datasaver.dataset

Starting experimental run with id: 30.

[14]:

axs, cbs = plot_dataset(ds3)

[15]:

axs, cbs = plot_dataset(ds3, complex_plot_type='mag_and_phase')

[ ]: