Vizualizace výsledků
Verze balíčků
Kód na této stránce byl vyvinut s použitím následujících požadavků. Doporučujeme používat tyto nebo novější verze.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Vykreslení histogramu
Funkce plot_histogram vizualizuje výsledek vzorkování kvantového Circuit na QPU.
Tato funkce vrací objekt matplotlib.Figure. Pokud je poslední řádek buňky kódu výstupem těchto objektů, Jupyter notebooky je zobrazí pod buňkou. Pokud tyto funkce voláš v jiném prostředí nebo ve skriptech, budeš muset výstupy explicitně zobrazit nebo uložit.
Dvě možnosti jsou:
- Zavolej
.show()na vráceném objektu, čímž otevřeš obrázek v novém okně (za předpokladu, že nakonfigurovaný matplotlib backend je interaktivní). - Zavolej
.savefig("out.png"), čímž uložíš obrázek do souboruout.pngv aktuálním pracovním adresáři. Metodasavefig()přijímá cestu, takže si můžeš přizpůsobit umístění a název souboru, kam ukládáš výstup. Napříkladplot_state_city(psi).savefig("out.png").
Například vytvoř dvouqubitový Bell stav:
# 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())
Možnosti při vykreslování histogramu
Pro úpravu výstupního grafu použij následující možnosti funkce plot_histogram.
legend: Poskytuje popisek pro spuštění. Přijímá seznam řetězců, které označují výsledky každého spuštění. To je nejužitečnější při vykreslování výsledků více spuštění ve stejném histogramu.sort: Upravuje pořadí sloupců v histogramu. Lze nastavit buď na vzestupné pořadí pomocíasc, nebo na sestupné pořadí pomocídesc.number_to_keep: Přijímá celé číslo určující počet zobrazovaných položek. Zbývající jsou sdruženy do jednoho sloupce nazvaného "rest".color: Upravuje barvu sloupců; přijímá řetězec nebo seznam řetězců určujících barvy sloupců pro každé spuštění.bar_labels: Upravuje, zda se nad sloupci zobrazují popisky.figsize: Přijímá tuple s velikostí výstupního obrázku v palcích.
# 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,
)
Vykreslování výsledků Estimatoru
Qiskit nemá vestavěnou funkci pro vykreslování výsledků Estimatoru, ale pro rychlou vizualizaci můžeš použít Matplotlib bar plot.
Jako ukázku následující buňka odhaduje střední hodnoty sedmi různých observablů na kvantovém stavu.
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>
Následující buňka využívá odhadnutou standardní chybu každého výsledku a přidává ji jako chybové úsečky. Úplný popis grafu najdeš v dokumentaci bar plotu.
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)')