Visualizar os resultados
O código desta página foi desenvolvido usando os seguintes requisitos. Recomendamos o uso dessas versões ou de versões mais recentes.
qiskit[all]~=2.5.0
Histograma de plotagem
A função plot_histogram visualiza o resultado da amostragem de um circuito quântico em uma QPU.
Essa função retorna um objeto matplotlib.Figure . Quando a última linha de uma célula de código gera esses objetos, os notebooks Jupyter os exibem abaixo da célula. Se você chamar essas funções em outros ambientes ou em scripts, precisará mostrar ou salvar explicitamente os resultados.
Há duas opções:
- Chame
.show()no objeto retornado para abrir a imagem em uma nova janela (supondo que seu backend matplotlib configurado seja interativo). - Chame
.savefig("out.png")para salvar a figura emout.pngno diretório de trabalho atual. O métodosavefig()usa um caminho para que você possa 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 Bell de dois qubits:
from qiskit.primitives import StatevectorSampler as Sampler
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.circuit import QuantumCircuit
from qiskit.visualization import plot_histogram# 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(optimization_level=1)
isa_circuit = pm.run(bell)
# execute the quantum circuit
sampler = Sampler()
job = sampler.run([isa_circuit])
result = job.result()
print(result)Output:
PrimitiveResult([SamplerPubResult(data=DataBin(meas=BitArray(<shape=(), num_shots=1024, num_bits=2>)), metadata={'shots': 1024, 'circuit_metadata': {}})], metadata={'version': 2})
plot_histogram(result[0].data.meas.get_counts())Output:
Opções ao traçar um histograma
Use as seguintes opções em plot_histogram para ajustar o gráfico de saída.
legend: Fornece um rótulo para as execuções. Ele recebe uma lista de cadeias de caracteres usadas para rotular os resultados de cada execução. Isso é útil principalmente ao plotar vários resultados de execução no mesmo histogramasort: Ajusta a ordem das barras no histograma. Ele pode ser definido em ordem crescente comascou em ordem decrescente comdescnumber_to_keep: Recebe um número inteiro para o número de termos a serem exibidos. O restante é agrupado em uma única barra chamada "resto"color: Ajusta a cor das barras; recebe uma cadeia de caracteres ou uma lista de cadeias de caracteres para as cores a serem usadas nas barras para cada execuçãobar_labels: Ajusta se os rótulos serão impressos acima das barrasfigsize: Obtém uma tupla do tamanho em polegadas para gerar a figura de saída
# Execute two-qubit Bell state again
job = sampler.run([isa_circuit], shots=1000)
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:
Resultados do Estimador de Área
O Qiskit não possui uma função interna para plotar os resultados do Estimador, mas você pode usar Matplotlib bar gráfico para uma visualização rápida.
Para demonstrar, a célula a seguir estima os valores de expectativa 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.primitives import StatevectorEstimator 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]
pm = generate_preset_pass_manager(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()
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())Output:
PubResult(data=DataBin(evs=np.ndarray(<shape=(7, 1), dtype=float64>), stds=np.ndarray(<shape=(7, 1), dtype=float64>), shape=(7, 1)), metadata={'target_precision': 0.0, 'circuit_metadata': {}})
<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 obter 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)")Output:
Text(0.5, 1.0, 'Expectation values (with standard errors)')