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
- R Basic Graphics System (pacote gráfico)
- 6 tipos de gráficos: gráfico de pontos/linha/barra/circular/histograma/diagrama de caixa
- parâmetros gráficos da função par() (cor, fonte, layout)
- layout() Layout com várias imagens
- Diferenças em relação ao ggplot2 (Quando usar cada um)
- Guia prático: Relatórios de dados de vendas com vários gráficos
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:
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
# 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?
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
4. plot(): Gráficos versáteis (principalmente gráficos de dispersão)
(1) Gráfico de dispersão básico
# Plot a scatter plot of two columns of data
x <- 1:10
y <- x ^ 2
plot(x, y)
(2) Parâmetros comuns
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 |
# 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()
# 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")
# 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()
# 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()
# 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))
geom_bar() em vez de pie().
(5) Histograma hist()
# 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()
# 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
# 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
# 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
# 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 |
plot(1:25, pch = 0:25, cex = 2)
8. Comparação com o ggplot2
(1) Duas maneiras de desenhar a mesma figura
# 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
# ============================================
# 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))
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 usarpar()para redefini-la antes dedev.off().
P: Como faço para salvar uma imagem em um arquivo? R: Use
png()/pdf()/jpeg(), etc.:
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) oufamily = "SimHei"(Windows). No Linux, usefamily = "WenQuanYi Zen Hei". No ggplot2, usetheme(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 ③ Usefacet_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 —
collwdpchcex— é preciso ajustar dezenas de parâmetros, um por um. O ggplot2 usatheme()para aplicar um estilo unificado, o que é mais eficiente.
📖 Resumo
- O R possui dois sistemas de plotagem: o R padrão (gráficos) e o ggplot2
- R Básico: 6 tipos de gráficos: plot (gráfico de dispersão) / plot type="l" (gráfico de linhas) / barplot (gráfico de barras) / pie (gráfico de setores) / hist (histograma) / boxplot (gráfico de caixa e bigodes)
par()Definir parâmetros globais:mfrowVárias imagens /marMargens /bgPlano de fundo /colCores /pchEstilos de pontoslayout()Layout flexível (1 grande + 4 pequenos)- Pinte usando
"red"/"#FF0000"/rainbow(n) - Salve a imagem usando
png()+dev.off()ouggsave() - O R básico é ideal para explorar dados rapidamente, enquanto o ggplot2 é ideal para publicação — aprenda os dois e escolha de acordo com suas necessidades
📝 Exercícios
-
Problema básico: Construa um vetor
sales <- c(100, 150, 200, 180, 220), usetype = "p","l","b"e"h"para desenhar quatro figuras (usandopar(mfrow = c(2, 2))) e verifique as diferenças entre as quatro figuras. -
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âmetroscol = rainbow(5),main,xlabeylab. -
Exercício básico: Use
hist()para traçar um histograma de 1.000 números aleatórios gerados porrnorm(100, 15), adicione os parâmetrosbreaks = 30ecol = "lightblue"e verifique se a distribuição se aproxima de uma distribuição normal. -
Exercício avançado: Simule as notas de 4 turmas com 10 alunos cada (usando
list()oudata.frame); em seguida, useboxplot()para traçar um gráfico de distribuição de notas da Turma 4, adicionando cores e um título. -
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, usepng("report.png", 1200, 800)para salvá-los como um único gráfico composto.