Vai al contenuto principale

Visualizzare i risultati

Versioni dei pacchetti

Il codice in questa pagina è stato sviluppato con i seguenti requisiti. Si consiglia di usare queste versioni o versioni più recenti.

qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1

Tracciare un istogramma​

La funzione plot_histogram visualizza il risultato del campionamento di un circuito quantistico su un QPU.

Usare l'output delle funzioni

Questa funzione restituisce un oggetto matplotlib.Figure. Quando l'ultima riga di una cella di codice produce questi oggetti, i notebook Jupyter li mostrano sotto la cella. Se chiami queste funzioni in altri ambienti o in script, dovrai mostrare o salvare esplicitamente gli output.

Due opzioni disponibili:

  • Chiama .show() sull'oggetto restituito per aprire l'immagine in una nuova finestra (supponendo che il backend matplotlib configurato sia interattivo).
  • Chiama .savefig("out.png") per salvare la figura in out.png nella directory di lavoro corrente. Il metodo savefig() accetta un percorso, così puoi scegliere posizione e nome del file di output. Ad esempio, plot_state_city(psi).savefig("out.png").

Ad esempio, crea uno stato di Bell a due qubit:

# 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())

Output della cella di codice precedente

Opzioni per la visualizzazione di un istogramma​

Usa le seguenti opzioni di plot_histogram per personalizzare il grafico di output.

  • legend: fornisce un'etichetta per le esecuzioni. Accetta una lista di stringhe usate per etichettare i risultati di ciascuna esecuzione. È particolarmente utile quando si tracciano più risultati di esecuzione nello stesso istogramma.
  • sort: regola l'ordine delle barre nell'istogramma. Può essere impostato su ordine crescente con asc o decrescente con desc.
  • number_to_keep: accetta un intero che indica il numero di termini da mostrare. Gli altri vengono raggruppati in un'unica barra chiamata "rest".
  • color: regola il colore delle barre; accetta una stringa o una lista di stringhe con i colori da usare per le barre di ciascuna esecuzione.
  • bar_labels: determina se le etichette vengono stampate sopra le barre.
  • figsize: accetta una tupla con le dimensioni in pollici della figura di output.
# 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,
)

Output della cella di codice precedente

Visualizzare i risultati dell'Estimator​

Qiskit non dispone di una funzione integrata per tracciare i risultati dell'Estimator, ma puoi usare il grafico bar di Matplotlib per una visualizzazione rapida.

A titolo dimostrativo, la cella seguente stima i valori di aspettazione di sette osservabili diversi su uno stato quantistico.

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>

Output della cella di codice precedente

La cella seguente utilizza l'errore standard stimato di ciascun risultato e lo aggiunge come barra d'errore. Consulta la documentazione del grafico bar per una descrizione completa del grafico.

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)')

Output della cella di codice precedente