Vizualizează rezultatele
Versiuni de pachete
Codul de pe această pagină a fost dezvoltat folosind următoarele cerințe. Recomandăm să folosești aceste versiuni sau unele mai noi.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Reprezentare grafică sub formă de histogramă
Funcția plot_histogram vizualizează rezultatul eșantionării unui Circuit cuantic pe un QPU.
Această funcție returnează un obiect matplotlib.Figure. Când ultima linie dintr-o celulă de cod produce astfel de obiecte, notebook-urile Jupyter le afișează sub celulă. Dacă apelezi aceste funcții în alte medii sau în scripturi, va trebui să afișezi sau să salvezi explicit rezultatele.
Două opțiuni sunt:
- Apelează
.show()pe obiectul returnat pentru a deschide imaginea într-o fereastră nouă (presupunând că backend-ul matplotlib configurat este interactiv). - Apelează
.savefig("out.png")pentru a salva figura înout.pngîn directorul de lucru curent. Metodasavefig()acceptă o cale, astfel că poți ajusta locația și numele fișierului în care salvezi rezultatul. De exemplu,plot_state_city(psi).savefig("out.png").
De exemplu, creează o stare Bell cu doi Qubiți:
# Added by doQumentation — required packages for this notebook
!pip install -q matplotlib numpy qiskit qiskit-ibm-runtime
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.visualization import plot_histogram
service = QiskitRuntimeService()
backend = service.least_busy(simulator=False, operational=True)
# Quantum circuit to make a Bell state
bell = QuantumCircuit(2)
bell.h(0)
bell.cx(0, 1)
bell.measure_all()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(bell)
# execute the quantum circuit
sampler = Sampler(backend)
job = sampler.run([isa_circuit])
result = job.result()
print(result)
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=4096, num_bits=2>)), metadata={'circuit_metadata': {}})], metadata={'execution': {'execution_spans': ExecutionSpans([DoubleSliceSpan(<start='2026-01-15 07:11:30', stop='2026-01-15 07:11:32', size=4096>)])}, 'version': 2})
plot_histogram(result[0].data.meas.get_counts())
Opțiuni la reprezentarea unei histograme
Folosește următoarele opțiuni pentru plot_histogram pentru a ajusta graficul rezultat.
legend: Oferă o etichetă pentru execuții. Acceptă o listă de șiruri de caractere folosite pentru a eticheta rezultatele fiecărei execuții. Este util mai ales când reprezinți grafic mai multe rezultate de execuție în aceeași histogramă.sort: Ajustează ordinea barelor din histogramă. Poate fi setat fie pe ordine crescătoare cuasc, fie pe ordine descrescătoare cudesc.number_to_keep: Acceptă un număr întreg reprezentând numărul de termeni de afișat. Restul sunt grupați împreună într-o singură bară numită „rest".color: Ajustează culoarea barelor; acceptă un șir de caractere sau o listă de șiruri de caractere pentru culorile de folosit pentru barele fiecărei execuții.bar_labels: Ajustează dacă sunt afișate etichete deasupra barelor.figsize: Acceptă un tuplu cu dimensiunea în inci a figurii de ieșire.
# Execute two-qubit Bell state again
sampler.options.default_shots = 1000
job = sampler.run([isa_circuit])
second_result = job.result()
# Plot results with custom options
plot_histogram(
[
result[0].data.meas.get_counts(),
second_result[0].data.meas.get_counts(),
],
legend=["first", "second"],
sort="desc",
figsize=(15, 12),
color=["orange", "black"],
bar_labels=False,
)
Reprezentarea grafică a rezultatelor Estimator
Qiskit nu dispune de o funcție integrată pentru reprezentarea grafică a rezultatelor Estimator, dar poți folosi graficul bar din Matplotlib pentru o vizualizare rapidă.
Pentru a demonstra, celula următoare estimează valorile de așteptare ale șapte observabile diferite pe o stare cuantică.
import numpy as np
from qiskit import QuantumCircuit
from qiskit.quantum_info import SparsePauliOp
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.transpiler import generate_preset_pass_manager
from matplotlib import pyplot as plt
# Simple estimation experiment to create results
qc = QuantumCircuit(2)
qc.h(0)
qc.crx(1.5, 0, 1)
observables_labels = ["ZZ", "XX", "YZ", "ZY", "XY", "XZ", "ZX"]
observables = [SparsePauliOp(label) for label in observables_labels]
service = QiskitRuntimeService()
pm = generate_preset_pass_manager(backend=backend, optimization_level=1)
isa_circuit = pm.run(qc)
isa_observables = [
operator.apply_layout(isa_circuit.layout) for operator in observables
]
# Reshape observable array for broadcasting
reshaped_ops = np.fromiter(isa_observables, dtype=object)
reshaped_ops = reshaped_ops.reshape((7, 1))
estimator = Estimator(backend)
job = estimator.run([(isa_circuit, reshaped_ops)])
result = job.result()[0]
exp_val = job.result()[0].data.evs
print(result)
# Since the result array is structured as a 2D array where each element is a
# list containing a single value, you need to flatten the array.
# Plot using Matplotlib
plt.bar(observables_labels, exp_val.flatten())
PubResult(data=DataBin(evs=np.ndarray(<shape=(7, 1), dtype=float64>), stds=np.ndarray(<shape=(7, 1), dtype=float64>), ensemble_standard_error=np.ndarray(<shape=(7, 1), dtype=float64>), shape=(7, 1)), metadata={'shots': 4096, 'target_precision': 0.015625, 'circuit_metadata': {}, 'resilience': {}, 'num_randomizations': 32})
<BarContainer object of 7 artists>
Celula următoare folosește eroarea standard estimată a fiecărui rezultat și o adaugă sub formă de bare de eroare. Consultă documentația graficului bar pentru o descriere completă a graficului.
standard_error = job.result()[0].data.stds
_, ax = plt.subplots()
ax.bar(
observables_labels,
exp_val.flatten(),
yerr=standard_error.flatten(),
capsize=2,
)
ax.set_title("Expectation values (with standard errors)")
Text(0.5, 1.0, 'Expectation values (with standard errors)')