Pacotes Utilizados

#install.packages("read_excel")
#install.packages("tidyverse")

Importação e Resumo dos dados

#Limpando memoria
rm(list=ls())

#Importando os dados
#https://docs.google.com/spreadsheets/d/1V3udi3ePN70Tpgcwaw1_DP87bhHtNN2h922oJpfnEdo/edit?usp=sharing

library(readxl)
Dados=read_xlsx("HistogramaTrabalhoControleQualidade.xlsx")

head(Dados)
## # A tibble: 6 × 1
##   Densidade
##       <dbl>
## 1      40.9
## 2      40.8
## 3      41.5
## 4      43.2
## 5      38.7
## 6      42.3
attach(Dados)

#Medidas de Resumo
summary(Dados)
##    Densidade    
##  Min.   :35.40  
##  1st Qu.:39.77  
##  Median :40.85  
##  Mean   :40.90  
##  3rd Qu.:42.15  
##  Max.   :45.00
media=mean(Densidade);media
## [1] 40.9
var(Densidade)==sd(Densidade)^2
## [1] FALSE

Histograma Basico do R e Intervalos

hist(Densidade)

#Amplitude amostral
AmpliAmostral=max(Dados)-min(Dados);AmpliAmostral
## [1] 9.6
AmpliAmostral
## [1] 9.6
#Considerando Intervalo de 6 classes
AmpliAmostral/6
## [1] 1.6
#Largura do Intervalo de 1,6, sendo  classes
seq(min(Dados)-1,max(Dados)+1,1.6)
## [1] 34.4 36.0 37.6 39.2 40.8 42.4 44.0 45.6
#Histograma Basico do R com 10 intervalos
hist(Densidade,breaks = 7,col="deepskyblue",
  xlim = c(min(Dados)-1,max(Dados)+1))

Utilizando o GGPLOT2 para criar o histograma

#Chamando as bibliotecas
library(ggplot2)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ lubridate 1.9.2     ✔ tibble    3.2.1
## ✔ purrr     1.0.1     ✔ tidyr     1.3.0
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
ggplot(Dados, aes(x = Densidade)) +
  geom_histogram(bins = 7,fill = "deepskyblue", col = "black") +
  ggtitle("Histograma tamanho amostral da serras") +
  xlab("Tamanho das serras (mm)") +
  ylab("Densidade") +
  theme_classic()+
  #Linha Inferior Especificada
  geom_vline(xintercept = as.numeric(37), linetype = "dashed", color = "red", size = 1) +
  geom_text(x = as.numeric((37)), y = -2, label = "LIE = 37", vjust = -18, color = "black", size = 6)+
  #Linha Superior Especificada
  geom_vline(xintercept = as.numeric(44), linetype = "dashed", color = "red", size = 1) +
  geom_text(x = as.numeric((44)), y = -2, label = "LIE = 44", vjust = -18, color = "black", size = 6)+
  #Linhas Media
  geom_vline(xintercept = as.numeric(media), linetype = "dashed", color = "green", size = 1) +
  geom_text(x = as.numeric((media)), y = -2, label = "LM = Media", vjust = -18, color = "black", size = 6)

Melhorando Grafico do Histograma

seq(min(Dados)-1,max(Dados)+1,1.6)
## [1] 34.4 36.0 37.6 39.2 40.8 42.4 44.0 45.6
#Criando 6 classes de intervalos
faixas <-
  Dados$Densidade %>% 
cut( breaks =  c(34.4,36,37.6,39.2,40.8,42.4,44,45.6), labels = c("34.4-36","36-37.6","37.6-39.2","39.2.8-40.8","40.8-42.4","42.4-44","44-45"))
# Agrupando em faixas e colocando no data frame
Dados <- data.frame(Dados,Faixa=faixas)
head(Dados)
##   Densidade       Faixa
## 1      40.9   40.8-42.4
## 2      40.8 39.2.8-40.8
## 3      41.5   40.8-42.4
## 4      43.2     42.4-44
## 5      38.7   37.6-39.2
## 6      42.3   40.8-42.4
# Calcular as frequências de cada faixa
frequencia_f <- table(Dados$Faixa)

data.frame(Classes = names(frequencia_f), Frequencia = frequencia_f)
##       Classes Frequencia.Var1 Frequencia.Freq
## 1     34.4-36         34.4-36               1
## 2     36-37.6         36-37.6               2
## 3   37.6-39.2       37.6-39.2              11
## 4 39.2.8-40.8     39.2.8-40.8              26
## 5   40.8-42.4       40.8-42.4              24
## 6     42.4-44         42.4-44              14
## 7       44-45           44-45               2
# Definir tamanho global do gráfico
options(
  repr.plot.width =9,    # Largura em polegadas
  repr.plot.height = 8   # Altura em polegadas
)

# Calcular as frequências de cada faixa
  frequencia_f <- table(Dados$Faixa)

# Calcular as porcentagens de cada faixa
porcentagens <- round(frequencia_f/ sum(frequencia_f) * 100, 1)

# Criar um dataframe para o gráfico
faixas = names(frequencia_f)
Frequencia = frequencia_f
Porcentagem = porcentagens
grafico_data <- data.frame(Classes = names(frequencia_f), Frequencia = frequencia_f, Porcentagem = porcentagens)

# Criar o gráfico de barras usando ggplot2
grafico_barras <- ggplot(data = grafico_data, aes(x = Classes, y = frequencia_f)) +
  geom_bar(stat = "identity", fill = "dodgerblue1") +
  geom_text(aes(label = paste(frequencia_f, "-", porcentagens, "%", sep = "")), vjust = -0.5, color = "black") +
  labs(title = "Histograma tamanho amostral da serras", x = "Tamanho das serras (mm)", y = "QuantidadeS + %") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 0, hjust = 1))+
  geom_vline(xintercept = as.numeric(as.factor(37)) + 1, linetype = "dashed", color = "red", size = 1) +
  geom_text(x = as.numeric(as.factor(37)) + 1, y = max(grafico_data$frequencia_f) + 5, label = "LIE = 37", vjust = -18, color = "black", size = 6)+
  geom_vline(xintercept = as.numeric(as.factor(44)) + 5.5, linetype = "dashed", color = "red", size = 1) +
  geom_text(x = as.numeric(as.factor(44)) + 5.5, y = max(grafico_data$frequencia_f) + 5, label = "LSE = 44", vjust = -18, color = "black", size = 6)+
  geom_text(x = as.numeric(as.factor(37)) + 1, y = max(grafico_data$frequencia_f) + 5, label = "LIE = 37", vjust = -18, color = "black", size = 6)+
  geom_vline(xintercept = as.numeric(as.factor(media)) + 3, linetype = "dashed", color = "green4", size = 1) +
  geom_text(x = as.numeric(as.factor(media)) + 3, y = max(grafico_data$frequencia_f) + 5, label = "Media", vjust = -18, color = "black", size = 6)

# Exibir o gráfico de barras
print(grafico_barras)
## Don't know how to automatically pick scale for object of type <table>.
## Defaulting to continuous.

# Salvar o gráfico com dimensões personalizadas (width e height em polegadas)
ggsave("grafico_barrasIdadeFaixa.png", plot = grafico_barras, width = 9, height = 8)
## Don't know how to automatically pick scale for object of type <table>.
## Defaulting to continuous.