R: الرسم البياني الأساسي في لغة R
آخر تحديث: 2026-08-26
يبدأ هذا الدرس قسم «الرسوم البيانية» من دليل تعلم لغة R — تصوير البيانات. تتوفر في لغة R نظامان للرسم البياني: R الأساسي (
plot/line/bar) و ggplot2 (ggplot + geom_). في هذا الدرس، سنبدأ بتعلم الرسم البياني باستخدام R الأساسي — فهو بسيط وسريع، مما يجعله خيارًا مثاليًّا للتحقق السريع من البيانات.
بعد الانتهاء من هذا الدرس، ستتمكن من إنشاء ستة أنواع أساسية من الرسوم البيانية في لغة R: الرسوم البيانية المبعثرة، والرسوم البيانية الخطية، والرسوم البيانية الشريطية، والرسوم البيانية الدائرية، والرسوم البيانية التكرارية، والرسوم البيانية الصندوقية.
1. ما ستتعلمه
- نظام R الأساسي للرسومات (حزمة رسومات)
- 6 أنواع أساسية من الرسوم البيانية: الرسم البياني/الخطي/الشريطي/الدائري/التاريخي/الرسم البياني الصندوقي
- معلمات الرسوم في دالة par() (اللون، الخط، التخطيط)
- layout() تخطيط متعدد الصور
- الاختلافات عن ggplot2 (متى تستخدم أيًّا منهما)
- دليل عملي: تقارير بيانات المبيعات مع رسوم بيانية متعددة
2. قصة عن التصور البصري للمبيعات
(1) المشكلة: الجدول ليس بديهياً بما فيه الكفاية
قدم بوب أرقام المبيعات للربع الرابع إلى المدير:
Region Q1 Q2 Q3 Q4
Beijing 1000 1200 1100 1500
Shanghai 1500 1800 1700 2000
Guangzhou 800 900 1000 1200
ألقى المدير نظرة سريعة عليه وقال: «لا يهمني الأرقام — أعطني الرسم البياني فحسب».
(2) الحل باستخدام لغة 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 أسطر من التعليمات البرمجية → 3 رسوم بيانية. هذه هي السرعة التي يتم بها إنشاء الرسوم البيانية الأساسية في لغة R.
3. نظاما الرسم البياني في لغة R
(1) المقارنة
| مقال خاص | أساسيات لغة R (الرسوم البيانية) | ggplot2 |
|---|---|---|
| السرعة | سريع جدًا (10 أسطر) | أبطأ (عشرات الأسطر) |
| سهولة التعلم | ✅ بسيط | ❌ منحنى تعلم حاد |
| افتراضي، جذاب | ❌ أساسي | ✅ بجودة النشر |
| المرونة | ⚠️ محدودة | ✅ مرونة عالية |
| السيناريوهات المناسبة | مراجعة سريعة للبيانات | المنشورات/التقارير |
| قواعد النحو الأساسية | "الرسم على اللوحة" | قواعد الرسومات |
(2) متى يستخدم أي منهما؟
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(): رسوم بيانية متعددة الاستخدامات (بشكل أساسي رسوم بيانية مبعثرة)
(1) مخطط الانتشار الأساسي
# Plot a scatter plot of two columns of data
x <- 1:10
y <- x ^ 2
plot(x, y)
(2) المعلمات المشتركة
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 أنواع
| النوع | المعنى | الغرض |
|---|---|---|
"p" |
النقاط (الافتراضي) | مخطط الانتشار |
"l" |
خط | مخطط خطي |
"b" |
النقاط والخطوط | مخطط الاتجاه |
"o" |
نقطة عبر خط | سلسلة زمنية |
"h" |
خط عمودي | مخطط شريطي (نسخة خطية) |
"s" |
السلالم | مخطط الدرج |
# 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 مخططات أساسية
(1) مخطط الانتشار 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) رسم مخطط خطي (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) المخطط الشريطي 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) الرسم البياني الدائري 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() بدلاً من pie().
(5) الرسم البياني التكراري 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) مخطط الصندوق 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()
(1) وفقًا لجدول المرجع السريع
| المعلمة | الوظيفة | مثال |
|---|---|---|
mfrow |
تخطيط متعدد الصور (صفوف × أعمدة) | par(mfrow = c(2, 2)) |
mar |
الهامش (4 أرقام) | par(mar = c(5, 4, 4, 2)) |
bg |
لون الخلفية | par(bg = "lightyellow") |
col |
اللون الافتراضي | par(col = "blue") |
cex |
حجم النص الافتراضي | par(cex = 1.2) |
lty |
خط متصل | par(lty = 2) خط متقطع |
pch |
شكل النقطة | par(pch = 19) |
(2) تخطيط متعدد الصور
# 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() التخطيط المرن
# 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. اللون وشكل النقطة
(1) اللون
# 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) شكل النقطة pch
| pch | الشكل | الغرض |
|---|---|---|
| 0–6 | مجوفة | أشكال متنوعة |
| 19–25 | صلب | موصى به (واضح) |
| 19 | النقاط | الأكثر شيوعًا |
| 17 | المثلث | التأكيد |
| 15 | كتلة | ثنائي |
plot(1:25, pch = 0:25, cex = 2)
8. مقارنة مع ggplot2
(1) طريقتان لرسم الشكل نفسه
# 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) متى تختار أيهما؟
| السيناريو | التوصية |
|---|---|
| نظرة عامة سريعة على البيانات | أساسيات لغة R (الرسم البياني باستخدام خط واحد) |
| المنشورات/الأوراق البحثية | ggplot2 (رسوم بيانية بجودة النشر) |
| دليل تعليمي | أساسيات لغة R (بسيطة وسهلة الفهم) |
| تقرير موحد | ggplot2 (السمة الموحدة) |
| ضبط المعلمات | ggplot2 (الضبط الدقيق) |
9. مثال كامل: تقرير متعدد الرسوم البيانية حول بيانات المبيعات
فيما يلي مثال على مسار عمل كامل يربط بين جميع المخططات الواردة في هذا الدرس.
▶ مثال: عرض بياني للمبيعات الفصلية في 4 مدن
# ============================================
# 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))
النتيجة المتوقعة: 6 رسوم بيانية (خطي، عمودي، دائري، هيستوغرام، مخطط صندوقي، وعمودي مكدس) مرتبة في شبكة 2×3.
❓ أسئلة شائعة
png() / pdf() / jpeg()، إلخ:png("myplot.png", width = 800, height = 600)
plot(1:10)
dev.off()
par(family = "PingFang SC") (macOS) أو family = "SimHei" (Windows). بالنسبة لنظام Linux، استخدم family = "WenQuanYi Zen Hei". بالنسبة لـ ggplot2، استخدم theme(text = element_text(family = ...)).par(mfrow = c(row, col)) التوزيع المتساوي ② layout(matrix(...)) التخطيط المرن ③ استخدم facet_wrap() في ggplot2 للتجميع حسب (أكثر فعالية).col lwd pch cex— حيث يتعين عليك تعديل عشرات المعلمات واحدة تلو الأخرى. أما ggplot2 فتستخدم theme() لتطبيق نمط موحد، وهو أسلوب أكثر كفاءة.📖 ملخص
- يحتوي لغة R على نظامين للرسم البياني: نظام R القياسي (للرسومات) وggplot2
- R الأساسي: 6 أنواع أساسية من الرسوم البيانية: plot (رسم بياني مبعثر) / plot type="l" (رسم بياني خطي) / barplot (رسم بياني شريطي) / pie (رسم بياني دائري) / hist (رسم بياني تكراري) / boxplot (رسم بياني صندوقي وذو أذنين)
par()ضبط المعلمات العامة:mfrowصور متعددة /marالهوامش /bgالخلفية /colالألوان /pchأنماط النقاطlayout()تصميم مرن (1 كبير + 4 صغيرة)- التلوين باستخدام
"red"/"#FF0000"/rainbow(n) - احفظ الصورة باستخدام
png()+dev.off()أوggsave() - يُعد برنامج R الأساسي مناسبًا لاستكشاف البيانات بسرعة، بينما يُعد ggplot2 مناسبًا للنشر — تعلم كليهما واختر ما يناسب احتياجاتك
📝 تمارين
-
المشكلة الأساسية: قم بإنشاء متجه
sales <- c(100, 150, 200, 180, 220)، واستخدمtype = "p"و"l"و"b"و"h"لرسم أربعة أشكال (باستخدامpar(mfrow = c(2, 2)))، وتحقق من الاختلافات بين الأشكال الأربعة. -
تمرين أساسي: استخدم
barplot()لإنشاء مخطط مقارنة المبيعات لخمس مدن (بأسماء مخصصة)، وقم بتضمين المعلمات الأربعةcol = rainbow(5)وmainوxlabوylab. -
تمرين أساسي: استخدم
hist()لرسم رسم بياني تكراري لـ 1,000 عدد عشوائي تم توليدها بواسطةrnorm(100, 15)، وأضف المعلماتbreaks = 30وcol = "lightblue"، وتأكد من أن التوزيع يقارب التوزيع الطبيعي. -
تمرين متقدم: قم بمحاكاة درجات 4 فصول دراسية، كل منها يضم 10 طلاب (باستخدام
list()أوdata.frame)، ثم استخدمboxplot()لرسم مخطط بياني لتوزيع الدرجات للفصل 4، مع إضافة الألوان والعنوان. -
التحدي: أكمل سير العمل — قم بمحاكاة مصفوفة مبيعات لـ 4 منتجات على مدار 4 أرباع سنوية، واستخدم
par(mfrow = c(2, 3))لإنشاء 6 مخططات: ① مخطط خطي يوضح الاتجاهات، ② مخطط شريطي للمقارنة، ③ مخطط دائري يوضح النسب المئوية، ④ مخطط تكراري يوضح التوزيع، ⑤ مخطط الصندوق والخطوط، ⑥ مخطط شريطي مكدس. وأخيرًا، استخدمpng("report.png", 1200, 800)لحفظها في شكل مخطط مركب واحد.