Montecarlo Packet Visualization
RPacketPlotter
plots the RPackets
that are generated by the Montecarlo method and creates an animated plot that contains the packet trajectories as they move away from the photosphere. The properties of individual RPackets are taken from the rpacket_tracker.
RPacketPlotter
uses the properties (specifically, mu
and r
) present in the rpacket_tracker
to calculate the coordinates of packets as they move through the ejecta. In the following section, the mathematical expression for getting the angle(θ) of packets with respect to the x-axis is shown, which can be used (along with radius r
) to calculate the x and y coordinates of packets.
Getting packet coordinates
RPacketPlotter
uses the properties (specifically, mu
and r
) present in the rpacket_tracker
to calculate the coordinates of packets as they move through the ejecta. In the following section, the mathematical expression for getting the angle(θ) of packets with respect to the x-axis is shown, which can be used (along with radius r
) to calculate the x and y coordinates of packets.
The diagram above shows the packet trajectory as it starts from photosphere P0
and continues to move along the subsequent points P1
, P2
, and so on.
Note
Here μ
represents the direction of packet propagation with respect to the radial line.
To determine the polar coordinates of any arbitrary point, say P2
, we need r2
and θ2
. r2
is already present in the array obtained from the simulation. To determine θ2
, we use the sine rule and apply it to the triangle OP1P2
, where O
is the center.
\[\frac{r_{2}}{\sin(\pi - \mu_{1})} = \frac{r_{1}}{\sin(\alpha)}\]
Now, writing α
in terms of μ1
and θ2
\[α = μ_{1} - θ_{2}\]
\[\frac{r_{2}}{\sin(\pi - \mu_{1})} = \frac{r_{1}}{\sin(μ_{1} - θ_{2})}\]
Thus,
\[θ_{2} = -\sin^{-1}(\frac{r1}{r2}\sin(\mu_{1})) + \mu_{1}\]
Hence, for i-th
point, θ
will be:
\[θ_{i} = -\sin^{-1}(\frac{r_{i-1}}{r_{i}}\sin(\mu_{i-1})) + \mu_{i-1}\]
Running the simulation
Atomic Data kurucz_cd23_chianti_H_He already exists in /home/runner/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5. Will not download - override with force_download=True.
[tardis.io.model.parse_atom_data][INFO ]
Reading Atomic Data from kurucz_cd23_chianti_H_He.h5 (parse_atom_data.py:40)
[tardis.io.atom_data.util][INFO ]
Atom Data kurucz_cd23_chianti_H_He.h5 not found in local path.
Exists in TARDIS Data repo /home/runner/Downloads/tardis-data/kurucz_cd23_chianti_H_He.h5 (util.py:34)
[tardis.io.atom_data.base][INFO ]
Reading Atom Data with: UUID = 6f7b09e887a311e7a06b246e96350010 MD5 = 864f1753714343c41f99cb065710cace (base.py:258)
[tardis.io.atom_data.base][INFO ]
Non provided Atomic Data: synpp_refs, photoionization_data, yg_data, two_photon_data, linelist_atoms, linelist_molecules (base.py:262)
[tardis.io.model.parse_density_configuration][WARNING]
Number of density points larger than number of shells. Assuming inner point irrelevant (parse_density_configuration.py:114)
[tardis.model.matter.decay][INFO ]
Decaying abundances for 1123200.0 seconds (decay.py:101)
[tardis.simulation.base][INFO ]
Starting iteration 1 of 20 (base.py:444)
[py.warnings ][WARNING]
/home/runner/work/tardis/tardis/tardis/transport/montecarlo/montecarlo_main_loop.py:123: NumbaTypeSafetyWarning:
unsafe cast from uint64 to int64. Precision may be lost.
(warnings.py:112)
[tardis.simulation.base][INFO ]
Luminosity emitted = 7.942e+42 erg / s
Luminosity absorbed = 2.659e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
9.93e+03 K |
1.01e+04 K |
0.4 |
0.507 |
5 |
9.85e+03 K |
1.02e+04 K |
0.211 |
0.197 |
10 |
9.78e+03 K |
1.01e+04 K |
0.143 |
0.117 |
15 |
9.71e+03 K |
9.87e+03 K |
0.105 |
0.0869 |
[tardis.simulation.base][INFO ]
Current t_inner = 9933.952 K
Expected t_inner for next iteration = 10703.212 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 2 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.071e+43 erg / s
Luminosity absorbed = 3.576e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.01e+04 K |
1.08e+04 K |
0.507 |
0.525 |
5 |
1.02e+04 K |
1.1e+04 K |
0.197 |
0.203 |
10 |
1.01e+04 K |
1.08e+04 K |
0.117 |
0.125 |
15 |
9.87e+03 K |
1.05e+04 K |
0.0869 |
0.0933 |
[tardis.simulation.base][INFO ]
Current t_inner = 10703.212 K
Expected t_inner for next iteration = 10673.712 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 3 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.074e+43 erg / s
Luminosity absorbed = 3.391e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 1/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.08e+04 K |
1.1e+04 K |
0.525 |
0.483 |
5 |
1.1e+04 K |
1.12e+04 K |
0.203 |
0.189 |
10 |
1.08e+04 K |
1.1e+04 K |
0.125 |
0.118 |
15 |
1.05e+04 K |
1.06e+04 K |
0.0933 |
0.0895 |
[tardis.simulation.base][INFO ]
Current t_inner = 10673.712 K
Expected t_inner for next iteration = 10635.953 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 4 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.058e+43 erg / s
Luminosity absorbed = 3.352e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 2/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.483 |
0.469 |
5 |
1.12e+04 K |
1.12e+04 K |
0.189 |
0.182 |
10 |
1.1e+04 K |
1.1e+04 K |
0.118 |
0.113 |
15 |
1.06e+04 K |
1.07e+04 K |
0.0895 |
0.0861 |
[tardis.simulation.base][INFO ]
Current t_inner = 10635.953 K
Expected t_inner for next iteration = 10638.407 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 5 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.055e+43 erg / s
Luminosity absorbed = 3.399e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 3/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.469 |
0.479 |
5 |
1.12e+04 K |
1.13e+04 K |
0.182 |
0.178 |
10 |
1.1e+04 K |
1.1e+04 K |
0.113 |
0.113 |
15 |
1.07e+04 K |
1.07e+04 K |
0.0861 |
0.0839 |
[tardis.simulation.base][INFO ]
Current t_inner = 10638.407 K
Expected t_inner for next iteration = 10650.202 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 6 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.061e+43 erg / s
Luminosity absorbed = 3.398e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 4/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.479 |
0.47 |
5 |
1.13e+04 K |
1.12e+04 K |
0.178 |
0.185 |
10 |
1.1e+04 K |
1.11e+04 K |
0.113 |
0.112 |
15 |
1.07e+04 K |
1.07e+04 K |
0.0839 |
0.0856 |
[tardis.simulation.base][INFO ]
Current t_inner = 10650.202 K
Expected t_inner for next iteration = 10645.955 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 7 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.061e+43 erg / s
Luminosity absorbed = 3.382e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 5/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.47 |
0.47 |
5 |
1.12e+04 K |
1.13e+04 K |
0.185 |
0.178 |
10 |
1.11e+04 K |
1.11e+04 K |
0.112 |
0.112 |
15 |
1.07e+04 K |
1.07e+04 K |
0.0856 |
0.086 |
[tardis.simulation.base][INFO ]
Current t_inner = 10645.955 K
Expected t_inner for next iteration = 10642.050 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 8 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.062e+43 erg / s
Luminosity absorbed = 3.350e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 6/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.11e+04 K |
0.47 |
0.472 |
5 |
1.13e+04 K |
1.14e+04 K |
0.178 |
0.175 |
10 |
1.11e+04 K |
1.11e+04 K |
0.112 |
0.111 |
15 |
1.07e+04 K |
1.07e+04 K |
0.086 |
0.084 |
[tardis.simulation.base][INFO ]
Current t_inner = 10642.050 K
Expected t_inner for next iteration = 10636.106 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 9 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.052e+43 erg / s
Luminosity absorbed = 3.411e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 7/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.11e+04 K |
0.472 |
0.469 |
5 |
1.14e+04 K |
1.15e+04 K |
0.175 |
0.17 |
10 |
1.11e+04 K |
1.11e+04 K |
0.111 |
0.109 |
15 |
1.07e+04 K |
1.08e+04 K |
0.084 |
0.0822 |
[tardis.simulation.base][INFO ]
Current t_inner = 10636.106 K
Expected t_inner for next iteration = 10654.313 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 10 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.070e+43 erg / s
Luminosity absorbed = 3.335e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 8/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.1e+04 K |
0.469 |
0.475 |
5 |
1.15e+04 K |
1.14e+04 K |
0.17 |
0.177 |
10 |
1.11e+04 K |
1.11e+04 K |
0.109 |
0.112 |
15 |
1.08e+04 K |
1.06e+04 K |
0.0822 |
0.0878 |
[tardis.simulation.base][INFO ]
Current t_inner = 10654.313 K
Expected t_inner for next iteration = 10628.190 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 11 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.053e+43 erg / s
Luminosity absorbed = 3.363e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 9/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.475 |
0.472 |
5 |
1.14e+04 K |
1.12e+04 K |
0.177 |
0.184 |
10 |
1.11e+04 K |
1.1e+04 K |
0.112 |
0.114 |
15 |
1.06e+04 K |
1.06e+04 K |
0.0878 |
0.0859 |
[tardis.simulation.base][INFO ]
Current t_inner = 10628.190 K
Expected t_inner for next iteration = 10644.054 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 12 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.056e+43 erg / s
Luminosity absorbed = 3.420e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 10/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.11e+04 K |
0.472 |
0.467 |
5 |
1.12e+04 K |
1.13e+04 K |
0.184 |
0.176 |
10 |
1.1e+04 K |
1.11e+04 K |
0.114 |
0.11 |
15 |
1.06e+04 K |
1.08e+04 K |
0.0859 |
0.0821 |
[tardis.simulation.base][INFO ]
Current t_inner = 10644.054 K
Expected t_inner for next iteration = 10653.543 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 13 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.062e+43 erg / s
Luminosity absorbed = 3.406e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 11/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.11e+04 K |
0.467 |
0.466 |
5 |
1.13e+04 K |
1.13e+04 K |
0.176 |
0.18 |
10 |
1.11e+04 K |
1.11e+04 K |
0.11 |
0.111 |
15 |
1.08e+04 K |
1.08e+04 K |
0.0821 |
0.0841 |
[tardis.simulation.base][INFO ]
Current t_inner = 10653.543 K
Expected t_inner for next iteration = 10647.277 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 14 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.063e+43 erg / s
Luminosity absorbed = 3.369e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 12/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.11e+04 K |
0.466 |
0.469 |
5 |
1.13e+04 K |
1.13e+04 K |
0.18 |
0.182 |
10 |
1.11e+04 K |
1.1e+04 K |
0.111 |
0.113 |
15 |
1.08e+04 K |
1.07e+04 K |
0.0841 |
0.0854 |
[tardis.simulation.base][INFO ]
Current t_inner = 10647.277 K
Expected t_inner for next iteration = 10638.875 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 15 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.053e+43 erg / s
Luminosity absorbed = 3.417e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 13/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.1e+04 K |
0.469 |
0.484 |
5 |
1.13e+04 K |
1.13e+04 K |
0.182 |
0.181 |
10 |
1.1e+04 K |
1.1e+04 K |
0.113 |
0.113 |
15 |
1.07e+04 K |
1.07e+04 K |
0.0854 |
0.0858 |
[tardis.simulation.base][INFO ]
Current t_inner = 10638.875 K
Expected t_inner for next iteration = 10655.125 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 16 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.059e+43 erg / s
Luminosity absorbed = 3.445e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 14/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.1e+04 K |
0.484 |
0.472 |
5 |
1.13e+04 K |
1.13e+04 K |
0.181 |
0.177 |
10 |
1.1e+04 K |
1.1e+04 K |
0.113 |
0.113 |
15 |
1.07e+04 K |
1.06e+04 K |
0.0858 |
0.0858 |
[tardis.simulation.base][INFO ]
Current t_inner = 10655.125 K
Expected t_inner for next iteration = 10655.561 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 17 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.067e+43 erg / s
Luminosity absorbed = 3.372e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 15/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.1e+04 K |
1.11e+04 K |
0.472 |
0.468 |
5 |
1.13e+04 K |
1.14e+04 K |
0.177 |
0.175 |
10 |
1.1e+04 K |
1.11e+04 K |
0.113 |
0.11 |
15 |
1.06e+04 K |
1.08e+04 K |
0.0858 |
0.0816 |
[tardis.simulation.base][INFO ]
Current t_inner = 10655.561 K
Expected t_inner for next iteration = 10636.536 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 18 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.057e+43 erg / s
Luminosity absorbed = 3.365e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 16/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.11e+04 K |
0.468 |
0.464 |
5 |
1.14e+04 K |
1.13e+04 K |
0.175 |
0.177 |
10 |
1.11e+04 K |
1.1e+04 K |
0.11 |
0.113 |
15 |
1.08e+04 K |
1.07e+04 K |
0.0816 |
0.0848 |
[tardis.simulation.base][INFO ]
Current t_inner = 10636.536 K
Expected t_inner for next iteration = 10641.692 K
(base.py:652)
[tardis.simulation.base][INFO ]
Starting iteration 19 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.056e+43 erg / s
Luminosity absorbed = 3.405e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
[tardis.simulation.base][INFO ]
Iteration converged 17/4 consecutive times. (base.py:260)
[tardis.simulation.base][INFO ]
Plasma stratification: (base.py:625)
Shell No. |
t_rad |
next_t_rad |
w |
next_w |
0 |
1.11e+04 K |
1.11e+04 K |
0.464 |
0.466 |
5 |
1.13e+04 K |
1.13e+04 K |
0.177 |
0.177 |
10 |
1.1e+04 K |
1.11e+04 K |
0.113 |
0.111 |
15 |
1.07e+04 K |
1.07e+04 K |
0.0848 |
0.0853 |
[tardis.simulation.base][INFO ]
Current t_inner = 10641.692 K
Expected t_inner for next iteration = 10650.463 K
(base.py:652)
[tardis.simulation.base][INFO ]
Simulation finished in 19 iterations
Simulation took 70.59 s
(base.py:542)
[tardis.simulation.base][INFO ]
Starting iteration 20 of 20 (base.py:444)
[tardis.simulation.base][INFO ]
Luminosity emitted = 1.061e+43 erg / s
Luminosity absorbed = 3.401e+42 erg / s
Luminosity requested = 1.059e+43 erg / s
(base.py:657)
Plotting Packets with RPacketPlotter
Importing the RPacketPlotter
Now, we create an RPacketPlotter object rpacket_plotter
that will be used to generate a plot.
no_of_packets
can be specified as a parameter to the from_simulation
class method. By default, 15
packets will used to create a plot.
Using the rpacket_plotter
we use the generate_plot
method to create a plot.
Here the theme
parameter can be defined. Currently, we have 2 themes, i.e. light
and dark
. By Default the light
theme will be plotted.
Using Animation and Other interactive features
The Play
button at the bottom-left can be used to start the animation. The animation can be paused at any time using the pause
button. Also, the timeline slider
can be used to reach any point in the animation. A demo is shown below.
Hovering over any packet will show its properties like its coordinates, interaction type, etc. The zoom-in
feature can be used to view a particular part of the plot. The demo below shows these features.