Visualizar resultados
Versões dos pacotes
O código nesta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou versões mais recentes.
qiskit[all]~=2.3.0
qiskit-ibm-runtime~=0.43.1
Plotar histograma
A função plot_histogram visualiza o resultado da amostragem de um circuito quântico em um QPU.
Essa função retorna um objeto matplotlib.Figure. Quando a última linha de uma célula de código retorna esses objetos, os notebooks Jupyter os exibem abaixo da célula. Se você chamar essas funções em outros ambientes ou em scripts, será necessário exibir ou salvar as saídas explicitamente.
Duas opções são:
- Chame
.show()no objeto retornado para abrir a imagem em uma nova janela (supondo que o backend matplotlib configurado seja interativo). - Chame
.savefig("out.png")para salvar a figura emout.pngno diretório de trabalho atual. O métodosavefig()aceita um caminho, então você pode ajustar o local e o nome do arquivo onde está salvando a saída. Por exemplo,plot_state_city(psi).savefig("out.png").
Por exemplo, crie um estado de Bell de dois qubits:
# 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ções ao plotar um histograma
Use as seguintes opções do plot_histogram para ajustar o gráfico de saída.
legend: Fornece um rótulo para as execuções. Recebe uma lista de strings usadas para rotular os resultados de cada execução. Isso é mais útil ao plotar múltiplos resultados de execução no mesmo histogramasort: Ajusta a ordem das barras no histograma. Pode ser definido como ordem crescente comascou ordem decrescente comdescnumber_to_keep: Recebe um inteiro com o número de termos a exibir. Os demais são agrupados em uma única barra chamada "rest"color: Ajusta a cor das barras; recebe uma string ou uma lista de strings com as cores a usar nas barras de cada execuçãobar_labels: Ajusta se os rótulos são impressos acima das barrasfigsize: Recebe uma tupla com o tamanho em polegadas para a figura de saída
# 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,
)
Plotar resultados do Estimator
O Qiskit não possui uma função nativa para plotar resultados do Estimator, mas você pode usar o gráfico bar do Matplotlib para uma visualização rápida.
Para demonstrar, a célula a seguir estima os valores esperados de sete observáveis diferentes em um estado quântico.
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>
A célula a seguir usa o erro padrão estimado de cada resultado e os adiciona como barras de erro. Consulte a documentação do gráfico bar para uma descrição completa do gráfico.
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)')