plot() هي دالة الرسم الشاملة في R
للرسم في R استدعِ plot(x, y) بـ متجهين عدديين لهما الطول نفسه. يرسم R نقطة لكل زوج، الأول على المحور الأفقي والثاني على المحور الرأسي، ويسمّي المحاور بأسماء المتغيرات تلقائيًا:
x <- 1:12
y <- c(2, 5, 4, 8, 9, 12, 11, 15, 14, 18, 17, 21)
plot(x, y)
والنتيجة انتشار من اثنتي عشرة دائرة مجوفة تتسلق باطراد مع نمو x. وهذه هي رسوم الدخول كلها: لا حزم تُثبَّت ولا إعدادات. فـ plot() تأتي مع base R، وهي الدالة الكامنة خلف معظم الرسوميات السريعة الاستكشافية.
ولأن مشغّل الشيفرة في هذه الصفحة يعرض المخرجات النصية فقط، فإن استدعاءات الرسم في هذه المقالة مقتطفات ثابتة، فالصقها في RStudio أو أي جلسة R محلية لترى الصور. أما ما تستطيع تشغيله هنا فهو تحضير البيانات. وهي عادة جيدة على أي حال: انظر إلى الأرقام قبل أن ترسمها.
وإذا مررت متجهًا واحدًا فقط، تستخدم plot(y) مواضع الفهارس 1 و2 و3 وهكذا محورًا أفقيًا، وهو مفيد لإلقاء نظرة سريعة على متتالية قياسات.
اختيار نوع الرسم
يحدد الوسيط type كيفية رسم الأزواج:
plot(x, y, type = "p") # points (the default)
plot(x, y, type = "l") # a connected line
plot(x, y, type = "b") # both: points joined by line segments
plot(x, y, type = "h") # vertical bars from zero, like a spike chart
plot(x, y, type = "s") # a step function
تحوّل type = "l" الانتشار إلى مخطط خطي، وهو ما تريده لأي شيء مقيس عبر الزمن. وتُبقي type = "b" الملاحظات المفردة مرئية مع إظهار الاتجاه العام. وترسم type = "h" قطعة رأسية رفيعة من الصفر إلى كل قيمة، وترسم type = "s" سلّمًا يُبقي كل قيمة حتى القيمة التالية، وهو مفيد للكميات التي تتغير قفزًا كسعر أو عدّاد مخزون.
العناوين والتسميات والألوان
الرسم بلا تسميات ملاحظة خاصة تكتبها لنفسك. وثلاثة وسائط تصلح ذلك: main للعنوان، وxlab وylab لتسميات المحاور. ويضبط col اللون:
plot(x, y,
type = "b",
main = "Monthly signups",
xlab = "Month",
ylab = "Signups (thousands)",
col = "steelblue")
يقبل col ثلاثة أنواع من القيم:
- ألوان مسمّاة: مثل
"red"و"steelblue"و"tomato"و"darkgreen". ويعرف R 657 لونًا منها، فشغّلcolors()لسرد كل الأسماء. - رموز ست عشرية: مثل
col = "#2C7FB8"، تمامًا كما في CSS. - متجه ألوان: لون لكل نقطة، وهكذا تلوّن النقاط حسب المجموعة:
col = c("tomato", "steelblue")[group]حيثgroupعامل.
رموز النقاط بـ pch والأحجام بـ cex وlwd
الدائرة المجوفة الافتراضية مناسبة للاستكشاف لكنها معتمة في أي شيء تعرضه على الآخرين. ويختار pch (اختصار plotting character) الرمز، وهو مرقّم من 0 إلى 25:
plot(x, y, pch = 19) # solid circle - the usual choice
plot(x, y, pch = 17) # solid triangle
plot(x, y, pch = 21, col = "black",
bg = "gold") # fillable circle: border + fill
ورقمان يستحقان الحفظ. القيمة pch = 19 هي الدائرة المصمتة التي تستخدمها معظم الرسوم النهائية. والقيم pch = 21 حتى 25 هي الرموز القابلة للتعبئة: يلوّن col الحد ويلوّن bg الداخل، فتحصل على نقاط ثنائية اللون.
وللحجم ونمط الخط أقراص ضبط خاصة بها:
- يقيس
cexحجم النقطة: فـcex = 1.5يجعل النقاط أكبر بمقدار النصف. - يضبط
lwdعرض الخط فيtype = "l"أو"b": فـlwd = 2خط متين واضح. - يضبط
ltyنمط الخط:lty = 1متصل، و2متقطع، و3منقّط.
التراكب: points() وlines() وabline()
تبدأ plot() رسمًا جديدًا. وللرسم فوق رسم موجود، استخدم رفيقاتها التي تضيف إلى الرسم الحالي بدل استبداله:
plot(x, y, type = "l", lwd = 2, col = "steelblue",
main = "Actual vs. target")
points(x, y, pch = 19, col = "steelblue") # add the observations
lines(x, x * 1.5, lty = 2, col = "gray40") # add a second series, dashed
abline(h = 10, col = "tomato") # horizontal reference line at y = 10
abline() هي أداة الخطوط المرجعية ولها ثلاثة أوضاع:
-
abline(h = 10): خط أفقي عند قيمة محددة على المحور الرأسي. -
abline(v = 6): خط رأسي عند قيمة محددة على المحور الأفقي. -
abline(a = 0, b = 1.5): خط بمقطعaوميلb.
وأفضل حيلها: مرّر إليها نموذجًا معايرًا فترسم لك خط الانحدار عبر abline(lm(y ~ x)). وهذا السطر الواحد يحوّل انتشارًا إلى حجة، ويبني عليه دليل مخطط الانتشار.
وقاعدة واحدة تستحق الاحترام: تُثبَّت حدود المحاور باستدعاء plot() الأول. فإذا امتدت سلسلة متراكبة خارجها، اقتُطعت، لذا اضبط xlim = وylim = في plot() الأصلية بسخاء يكفي لكل ما تنوي إضافته.
إضافة مفتاح إيضاح
حين يحمل الرسم أكثر من سلسلة واحدة، يحتاج إلى مفتاح إيضاح. وتأخذ legend() كلمة موضع وسيطًا أول، مثل "topright" أو "topleft" أو "bottomright" أو "bottomleft" أو "top" أو "bottom" أو "center" (وهذه سلاسل R حرفية، لذا تبقى بالإنجليزية في شيفرتك)، ثم التسميات والأنماط المطابقة:
legend("topright",
legend = c("Actual", "Target"),
col = c("steelblue", "gray40"),
lty = c(1, 2),
pch = c(19, NA),
lwd = 2)
ويجب أن تتحاذى متجهات col وlty وpch مع legend مدخلة بمدخلة، فتأخذ التسمية الأولى اللون الأول وهكذا. واستخدم NA لنمط لا ينطبق على سلسلة ما (فهنا لا نقاط على خط الهدف). وتثبّت الكلمة المفتاحية الصندوق في زاوية من منطقة الرسم، فاختر الزاوية التي تتركها بياناتك فارغة.
لوحات متعددة والحفظ في ملف
لعرض عدة رسوم في شكل واحد، اضبط شبكة الرسم قبل أن ترسم: تقسم par(mfrow = c(1, 2)) الجهاز إلى صف واحد وعمودين، ويملأ استدعاءا plot() التاليان اللوحتين بالترتيب. وأعِد الضبط بـ par(mfrow = c(1, 1)) حين تنتهي، وإلا بقيت الرسوم التالية صغيرة.
ويعمل الحفظ في ملف بتحويل الرسم إلى جهاز ملف بدل الشاشة:
png("signups.png", width = 800, height = 600)
plot(x, y, type = "b", pch = 19, col = "steelblue",
main = "Monthly signups", xlab = "Month", ylab = "Signups")
dev.off()
كل ما بين png() وdev.off() يحط في الملف، ولا يظهر شيء على الشاشة. ونسيان dev.off() هو الخلل الكلاسيكي، إذ يبقى الملف مقفلًا وفارغًا حتى تغلق الجهاز. وتعمل pdf() وjpeg() وsvg() بالطريقة نفسها.
الخلاصة
- ترسم
plot(x, y)فورًا، ويبدّلtype =بين النقاط ("p") والخطوط ("l") وكليهما ("b"). - تسمّي
mainوxlabوylabالرسم، ويأخذcolأسماء ألوان (657 منها فيcolors()) أو رموزًا ست عشرية. - القيمة
pch = 19هي الدائرة المصمتة، والقيمpch = 21–25تفصل الحد (col) عن التعبئة (bg)، ويتحكمcexوlwdوltyفي الحجم ونمط الخط. - تتراكب
points()وlines()وabline()على الرسم الموجود، وتضيفabline(lm(y ~ x))خط انحدار في استدعاء واحد. - تسمّي
legend("topright", ...)السلاسل، ويحفظpng(...)معdev.off()الرسم في ملف.
في المستند التالي: المدرج التكراري، وهو رسم المتغير الواحد الذي ستلجأ إليه أولًا عند مقابلة مجموعة بيانات جديدة.
الأسئلة الشائعة
كيف ترسم رسمًا بيانيًا في R؟
استدعِ plot(x, y) بمتجهين عدديين لهما الطول نفسه. يفتح R نافذة رسوميات ويرسم نقطة لكل زوج. أضف type = "l" لمخطط خطي، وmain وxlab وylab للعناوين، وcol للون.
ماذا يعني pch في R؟
يختار pch (اختصار plotting character) رمز النقطة، وهو مرقّم من 0 إلى 25. والقيمة pch = 19 هي الدائرة المصمتة التي يريدها معظم الناس. أما الرموز من 21 إلى 25 فلها تعبئة منفصلة: يضبط col الحد ويضبط bg الداخل.
كيف تضيف مفتاح إيضاح إلى رسم بياني في R؟
استدعِ legend() بعد الرسم، مع كلمة موضع مثل "topright" وسيطًا أول، ومتجه تسميات في legend =، وقيم col أو pch أو lty المطابقة لما استخدمته في الرسم.
كيف تحفظ رسمًا بيانيًا من R في ملف؟
افتح جهاز ملف قبل الرسم وأغلقه بعده: png("myplot.png", width = 800, height = 600)، ثم شيفرة الرسم، ثم dev.off(). ولن يظهر شيء على الشاشة، إذ يذهب الرسم إلى الملف مباشرة.