Ensaios de Dureza Shore A

Gerenciamento de dados e geração de gráficos no padrão visual Origin

Entrada de dados

Resumo geral do grupo

Média geral

Desvio médio

Amostras · 5 leituras de Shore A

Preencha as 5 leituras para ver média e desvio
Preencha as 5 leituras para ver média e desvio
Preencha as 5 leituras para ver média e desvio
Preencha as 5 leituras para ver média e desvio

Pré-visualização

Preencha ao menos uma amostra para visualizar o gráfico.

Código Python

import warnings
from google.colab import files
import matplotlib.pyplot as plt
import numpy as np

warnings.filterwarnings("ignore", category=UserWarning)

# Estrutura montada automaticamente pela interface
dados_do_ensaio = [

]

NOME_DO_ARQUIVO = "grafico_dureza_shore.png"


def gerar_grafico_padrao(dados, nome_saida):
  all_amostras, all_medias, all_erros = [], [], []
  for g in dados:
    all_amostras.extend(g["amostras"])
    all_medias.extend(g["medias"])
    all_erros.extend(g["erros"])

  x = np.arange(len(all_amostras))
  fig, ax = plt.subplots(figsize=(8.5, 6), dpi=300)
  bars = ax.bar(
      x,
      all_medias,
      yerr=all_erros,
      capsize=4,
      color="white",
      edgecolor="black",
      hatch="///",
      linewidth=1.2,
      error_kw={"ecolor": "black", "lw": 1},
  )

  max_y = max([m + e for m, e in zip(all_medias, all_erros)])
  ax.set_ylim(15, max_y + 15)
  ax.set_ylabel("Dureza Shore A", fontsize=12, fontweight="bold")
  ax.set_xticks(x)
  ax.set_xticklabels(all_amostras, rotation=0, fontsize=11, fontweight="bold")
  ax.tick_params(
      axis="both", which="both", direction="in", top=True, right=True
  )

  curr_idx = 0
  for g in dados:
    n_items = len(g["amostras"])
    start_idx = curr_idx
    end_idx = curr_idx + n_items - 1
    curr_idx += n_items

    max_grupo = max([m + e for m, e in zip(g["medias"], g["erros"])])
    y_top = max_grupo + 7.5
    y_sub = y_top - 2.8

    # Reta + Texto do Grupo principal
    ax.plot(
        [start_idx - 0.35, end_idx + 0.35], [y_top, y_top], color="black", lw=1.2
    )
    ax.text(
        (start_idx + end_idx) / 2,
        y_top + 0.5,
        g["grupo"],
        ha="center",
        va="bottom",
        fontsize=11,
        fontweight="bold",
    )

    # Reta + Texto do Subtítulo (Aditivos/Ativadores/Cargas)
    if g.get("subtitulo"):
      ax.plot(
          [start_idx - 0.35, end_idx + 0.35],
          [y_sub, y_sub],
          color="black",
          lw=1.2,
      )
      ax.text(
          (start_idx + end_idx) / 2,
          y_sub + 0.5,
          g["subtitulo"],
          ha="center",
          va="bottom",
          fontsize=10,
      )

  plt.tight_layout()
  plt.savefig(nome_saida, dpi=300)
  plt.show()
  files.download(nome_saida)


gerar_grafico_padrao(dados_do_ensaio, NOME_DO_ARQUIVO)