R: Gráficos básicos no R

Última atualização: 2026-08-26

Esta lição dá início à seção “Gráficos” do tutorial do R — Visualização de Dados. O R possui dois sistemas de plotagem: o R básico (plot/line/bar) e o ggplot2 (ggplot + geom_). Nesta lição, começaremos aprendendo a plotagem com o R básico — ela é simples e rápida, o que a torna ideal para verificar dados rapidamente.

Ao concluir esta lição, você será capaz de criar seis tipos básicos de gráficos no R: gráficos de dispersão, gráficos de linha, gráficos de barras, gráficos de pizza, histogramas e gráficos de caixa.

1. O que você vai aprender



2. Uma história sobre a visualização de vendas

(1) Problema: A tabela não é intuitiva o suficiente

Bob apresentou os números de vendas do quarto trimestre ao gerente:

TEXT 📖 Somente leitura
Region    Q1    Q2    Q3    Q4
Beijing  1000  1200  1100  1500
Shanghai  1500  1800  1700  2000
Guangzhou   800   900  1000  1200

O gerente deu uma olhada nisso e disse: “Não me importo com os números — me dê apenas o gráfico.”

(2) Solução utilizando R

R
# 1. A Line Chart in One Line of Code(4 Quarterly City Trends)
plot(sales, type = "b", col = rainbow(4), main = "Quarterly Sales Trends")

# 2. Creating a bar chart in one line(4 Total City Sales)
barplot(rowSums(sales[, -1]), main = "Total Sales Comparison", col = "skyblue")

# 3. A Line Chart(Percentage)
pie(rowSums(sales[, -1]), labels = rownames(sales))

3 linhas de código → 3 gráficos. É assim que a criação de gráficos no R é rápida.



3. Os dois sistemas de plotagem do R

(1) Comparação

Matéria R Básico (gráficos) ggplot2
Velocidade Extremamente rápido (10 linhas) Mais lento (dezenas de linhas)
Facilidade de aprendizado ✅ Simples ❌ Curva de aprendizado íngreme
Padrão, Atraente ❌ Básico ✅ Qualidade de publicação
Flexibilidade ⚠️ Limitada ✅ Altamente flexível
Cenários adequados Análise rápida dos dados Publicações/Relatórios
Sintaxe básica “Desenhando na tela” Gramática dos gráficos

(2) Quando usar cada um?

100%
graph TB
    A[Imagination Drawing] --> B{Scene}
    B -->|Quick Data Overview| C[Basics R plot]
    B -->|Published/Report| D[ggplot2]
    B -->|Teaching Demonstration| E[Either one is fine]
    
    style A fill:#fff3cd
    style C fill:#d4edda
    style D fill:#cce5ff
💡 Dica: Use o R básico (rápido) para análises rápidas de dados e o ggplot2 (bonito) para elaboração de relatórios e artigos científicos. Esta aula aborda o R básico; a próxima abordará o ggplot2.



4. plot(): Gráficos versáteis (principalmente gráficos de dispersão)

(1) Gráfico de dispersão básico

R
# Plot a scatter plot of two columns of data
x <- 1:10
y <- x ^ 2
plot(x, y)

(2) Parâmetros comuns

R
plot(x, y,
     type = "p",           # Graph Type
     main = "Title",
     xlab = "X Axis",
     ylab = "Y Axis",
     col = "blue",         # Color
     pch = 19,             # Point-shaped(0-25)
     cex = 1.5,            # Font Size
     xlim = c(0, 12),     # X Shaft Range
     ylim = c(0, 110))    # Y Shaft Range

(3) 6 tipos

tipo Significado Finalidade
"p" Pontos (padrão) Gráfico de dispersão
"l" Linha Gráfico de linhas
"b" Pontos + Linhas Gráfico de tendências
"o" Ponto passando pela reta Série temporal
"h" Linha vertical Gráfico de barras (versão em linha)
"s" Escadas Diagrama de escadaria
R
# For the same set of data, 6 A Painting Technique
x <- 1:5
y <- c(2, 4, 3, 5, 4)

par(mfrow = c(2, 3))  # 2 row 3 Column Layout
for (t in c("p", "l", "b", "o", "h", "s")) {
  plot(x, y, type = t, main = paste("type =", t))
}


5. 6 Gráficos principais

(1) Gráfico de dispersão plot()

R
# 4 City Scatter Plot
x <- c(1, 2, 3, 4)
y <- c(1000, 1500, 800, 1200)
plot(x, y,
     main = "City Sales Scatter Plot",
     xlab = "City Code",
     ylab = "Sales",
     col = "blue",
     pch = 19)

(2) Gráfico de linhas plot(type = "l")

R
# Quarterly Trend Chart
quarters <- c("Q1", "Q2", "Q3", "Q4")
sales <- c(1000, 1200, 1100, 1500)

plot(quarters, sales,
     type = "b",     # Point + Line
     main = "Q1-Q4 Sales Trends",
     xlab = "Quarter",
     ylab = "Sales",
     col = "darkblue",
     lwd = 2,        # Line width
     pch = 19)

(3) Gráfico de barras barplot()

R
# 4 City Sales Bar Chart
sales_data <- c(Beijing = 4800, Shanghai = 7000, Guangzhou = 3900, Shenzhen = 4500)

barplot(sales_data,
        main = "Total Sales by City",
        xlab = "City",
        ylab = "Sales",
        col = c("red", "blue", "green", "orange"),
        border = "white",
        horiz = FALSE)  # TRUE Sideways

(4) Gráfico de setores pie()

R
# Sales Share Pie Chart
sales_data <- c(Beijing = 4800, Shanghai = 7000, Guangzhou = 3900, Shenzhen = 4500)

pie(sales_data,
    main = "Share of Sales",
    col = rainbow(4),
    labels = paste0(names(sales_data), "\n", sales_data))
⚠️ Observação: Não se recomenda o uso de gráficos de pizza — o olho humano não é sensível a ângulos, portanto, os gráficos de barras são mais precisos. O autor do ggplot2 também recomenda usar geom_bar() em vez de pie().

(5) Histograma hist()

R
# 1000 The Distribution of a Random Number
data <- rnorm(1000, mean = 100, sd = 15)

hist(data,
     main = "Normal Distribution",
     xlab = "Value",
     ylab = "Frequency",
     col = "lightblue",
     border = "white",
     breaks = 30)  # min 30 a range

(6) Gráfico de caixa boxplot()

R
# 4 Class Exam Score Distribution
scores <- list(
  1Cls = c(85, 90, 78, 92, 88, 76, 95, 80),
  2Cls = c(72, 80, 85, 78, 90, 88, 82, 75),
  3Cls = c(95, 88, 92, 90, 85, 78, 80, 88),
  4Cls = c(60, 65, 70, 75, 80, 85, 90, 95)
)

boxplot(scores,
        main = "4 Class Grade Distribution",
        xlab = "Class",
        ylab = "Fractions",
        col = c("red", "blue", "green", "orange"))


6. Parâmetros do gráfico par()

(1) por Tabela de Referência Rápida

Parâmetro Função Exemplo
mfrow Layout com várias imagens (linhas × colunas) par(mfrow = c(2, 2))
mar Margem (4 dígitos) par(mar = c(5, 4, 4, 2))
bg Cor de fundo par(bg = "lightyellow")
col Cor padrão par(col = "blue")
cex Tamanho padrão do texto par(cex = 1.2)
lty Linha contínua par(lty = 2) Linha tracejada
pch Forma de ponto par(pch = 19)

(2) Layout com várias imagens

R
# 2x2 Layout
par(mfrow = c(2, 2))

plot(1:10, main = "Plot 1")
plot(1:10, type = "l", main = "Plot 2")
barplot(1:5, main = "Plot 3")
pie(1:4, main = "Plot 4")

# Restore Default Layout
par(mfrow = c(1, 1))

(3) layout() Layout flexível

R
# 1 L + 4 S Layout
layout(matrix(c(1, 1, 2, 3,
                1, 1, 4, 5), nrow = 2, byrow = TRUE))

plot(1:10, main = "Large Image")           # 1
plot(1:5, main = "Small image 1")          # 2
plot(1:5, main = "Small image 2")          # 3
plot(1:5, main = "Small image 3")          # 4
plot(1:5, main = "Small image 4")          # 5

layout(1)  # Restore


7. Cor e forma do ponto

(1) Cor

R
# 1. Name
plot(1:5, col = "red")
plot(1:5, col = "blue")
plot(1:5, col = "darkgreen")

# 2. Hexadecimal
plot(1:5, col = "#FF0000")
plot(1:5, col = "#3366CC")

# 3. rainbow() Color Palette
barplot(1:7, col = rainbow(7))
barplot(1:7, col = heat.colors(7))
barplot(1:7, col = topo.colors(7))
barplot(1:7, col = terrain.colors(7))

(2) Forma de ponto pch

pch Forma Finalidade
0–6 Oco Várias formas
19–25 Sólido Recomendado (Claro)
19 Pontos Mais comuns
17 Triângulo Ênfase
15 Bloco Binário
R
plot(1:25, pch = 0:25, cex = 2)


8. Comparação com o ggplot2

(1) Duas maneiras de desenhar a mesma figura

R
# Data
df <- data.frame(x = 1:5, y = c(2, 4, 3, 5, 4))

# Basics R(5 row)
plot(df$x, df$y, type = "b", main = "Trends", xlab = "X", ylab = "Y",
     col = "blue", pch = 19, lwd = 2)

# ggplot2(6 row,**By default, it looks better**)
library(ggplot2)
ggplot(df, aes(x = x, y = y)) +
  geom_line(color = "blue") +
  geom_point(color = "blue", size = 3) +
  labs(title = "Trends", x = "X", y = "Y") +
  theme_minimal()

(2) Quando escolher qual delas?

Cenário Recomendação
Visão geral rápida dos dados R básico (grafos com uma linha)
Publicações/Artigos ggplot2 (Visualizações com qualidade de publicação)
Tutorial R básico (simples e fácil de entender)
Relatório padronizado ggplot2 (Tema unificado)
Ajuste de parâmetros ggplot2 (Ajuste fino)


9. Exemplo completo: Relatório com vários gráficos sobre dados de vendas

A seguir, apresentamos um exemplo de um fluxo de trabalho completo que reúne todos os diagramas desta lição.

▶ Exemplo: Visualização das vendas trimestrais em quatro cidades

R
# ============================================
# 4 Visualization of Quarterly City Sales
# Features:6 Comprehensive Display of Basic Charts
# ============================================

# 1. Prepare data
sales <- matrix(c(
  1000, 1200, 1100, 1500,  # Beijing
  1500, 1800, 1700, 2000,  # Shanghai
   800,  900, 1000, 1200,  # Guangzhou
  1200, 1400, 1300, 1600   # Shenzhen
), nrow = 4, byrow = TRUE)
rownames(sales) <- c("Beijing", "Shanghai", "Guangzhou", "Shenzhen")
colnames(sales) <- c("Q1", "Q2", "Q3", "Q4")
print(sales)

# 2. Settings 2x3 Layout
par(mfrow = c(2, 3), mar = c(4, 4, 3, 1))

# 3. Plot 1:Line Chart(4 City)
plot(1:4, sales[1, ], type = "b", col = "red", ylim = c(0, 2500),
     main = "Quarterly Sales Trends", xlab = "Quarter", ylab = "Sales",
     pch = 19, lwd = 2, xaxt = "n")
axis(1, at = 1:4, labels = colnames(sales))
for (i in 2:4) {
  lines(1:4, sales[i, ], type = "b", col = i, pch = 19, lwd = 2)
}
legend("topleft", legend = rownames(sales),
       col = 1:4, pch = 19, lwd = 2, cex = 0.7)

# 4. Plot 2:Bar Chart(Total Sales)
barplot(rowSums(sales),
        main = "Total Sales by City",
        xlab = "City", ylab = "Total Sales",
        col = c("red", "blue", "green", "orange"),
        border = "white")

# 5. Plot 3:Pie Chart(Percentage)
pie(rowSums(sales),
    main = "Share of Sales",
    col = rainbow(4),
    labels = paste0(rownames(sales), "\n", rowSums(sales)))

# 6. Plot 4:Histogram(Sales Distribution)
hist(sales, main = "Sales Distribution", xlab = "Sales",
     col = "lightblue", border = "white", breaks = 10)

# 7. Plot 5:Box-and-Whisker Plot(By City)
boxplot(sales, main = "Quarterly Sales Breakdown by City",
        xlab = "City", ylab = "Sales",
        col = c("red", "blue", "green", "orange"))

# 8. Plot 6:Stacked Bar Chart
barplot(sales, beside = FALSE,  # beside=FALSE → Stacked
        main = "Quarterly Sales Stacked Chart",
        xlab = "City", ylab = "Sales",
        col = c("red", "blue", "green", "orange"),
        legend.text = colnames(sales))

# 9. Restore Layout
par(mfrow = c(1, 1))
▶ Experimente

Resultado esperado: 6 gráficos (linha, barra, pizza, histograma, boxplot e barra empilhada) dispostos em uma grade 2x3.


❓ Perguntas Frequentes

P: O que devo usar — o R básico ou o ggplot2? R: Use o R básico para uma análise rápida dos seus dados (plot() barplot() — criar gráficos com uma única linha de código) e use o ggplot2 para relatórios e artigos (ele produz visuais com qualidade de publicação por padrão). Iniciantes devem começar com o R básico e, depois, passar para o ggplot2.

P: A configuração par() afeta as operações subsequentes? R: Sim! par() é uma configuração global; é preciso redefini-la após o uso (por exemplo, par(mfrow = c(1, 1))). Em código de produção, recomenda-se usar par() para redefini-la antes de dev.off().

P: Como faço para salvar uma imagem em um arquivo? R: Use png() / pdf() / jpeg(), etc.:

R
png("myplot.png", width = 800, height = 600)
plot(1:10)
dev.off()

ggplot2 avançado ggsave() (Próxima aula).

P: O que devo fazer se o texto na figura estiver distorcido? R: Adicione par(family = "PingFang SC") (macOS) ou family = "SimHei" (Windows). No Linux, use family = "WenQuanYi Zen Hei". No ggplot2, use theme(text = element_text(family = ...)).

P: Como faço para criar um layout com vários gráficos? R: ① par(mfrow = c(row, col)) Distribuição uniforme ② layout(matrix(...)) Layout flexível ③ Use facet_wrap() no ggplot2 para agrupar por (mais eficaz).

P: Posso alterar o estilo dos gráficos criados com o R básico? R: Sim, mas é trabalhoso — col lwd pch cex — é preciso ajustar dezenas de parâmetros, um por um. O ggplot2 usa theme() para aplicar um estilo unificado, o que é mais eficiente.


📖 Resumo


📝 Exercícios

  1. Problema básico: Construa um vetor sales <- c(100, 150, 200, 180, 220), use type = "p", "l", "b" e "h" para desenhar quatro figuras (usando par(mfrow = c(2, 2))) e verifique as diferenças entre as quatro figuras.

  2. Exercício básico: Use barplot() para criar um gráfico de comparação de vendas para 5 cidades (com nomes personalizados) e inclua os 4 parâmetros col = rainbow(5), main, xlab e ylab.

  3. Exercício básico: Use hist() para traçar um histograma de 1.000 números aleatórios gerados por rnorm(100, 15), adicione os parâmetros breaks = 30 e col = "lightblue" e verifique se a distribuição se aproxima de uma distribuição normal.

  4. Exercício avançado: Simule as notas de 4 turmas com 10 alunos cada (usando list() ou data.frame); em seguida, use boxplot() para traçar um gráfico de distribuição de notas da Turma 4, adicionando cores e um título.

  5. Desafio: Conclua o fluxo de trabalho — simule uma matriz de vendas para 4 produtos ao longo de 4 trimestres e use par(mfrow = c(2, 3)) para criar 6 gráficos: ① gráfico de linhas mostrando tendências, ② gráfico de barras para comparação, ③ gráfico de pizza mostrando porcentagens, ④ histograma mostrando distribuição, ⑤ gráfico de caixa e bigodes, ⑥ gráfico de barras empilhadas. Por fim, use png("report.png", 1200, 800) para salvá-los como um único gráfico composto.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%