من معمولا توی کلاسام پکیج ggplot رو درس میدم ولی توی این مجموعه پست می‌خوام پکیج graphics رو که یک پکیج پایه هست رو توضیح بدم. حتما میپرسین چرا؟ چون خیلی کار باهاش ساده هست و یه جاهایی برای تحلیل‌های اکتشافی یا کارای دم دستی خیلی خیلی کار راه بندازه. در عین حال به نظرم دونستنش توی درک بهتر ggplot مفیده.

مقدمه

ما توی ggplot یک مکانیزم طراحی لایه لایه داریم. یعنی میتونیم هر قسمت از طراحی نمودارمون رو توی یک لایه و مستقل از بقیه لایه ها انجام بدیم. ولی پکیج graphics اینطور نیست. بهترین توصیفی که میتونم از پکیج graphics بکنم اینه که فکر بکنین من و شما کنار هم نشستیم و من میخوام خیلی سریع یه نموداری که مد نظرمه رو روی یک کاغذ با خودکار بکشم! پس هر چیزی که کشیده شد دیگه امکان اصلاح یا تغییر نداره. این دقیقا مکانیزم کار پکیج graphics هست.

رسم چارت در Graphics

خیلی ساده ما میتونیم با استفاده از دستور plot یک چارت ایجاد کنیم که به صورت پیشفرض هم یک scatter chart هست. دو آرگومان‌ اول این تابع مشخص میکنن که چه داده‌ای روی محور xها و چه داده‌ای روی محور yها نمایش داده بشه. اگر مجموعه داده یا دیتا فریم ما تنها دو ستون داشته باشه، خودش به صورت پیشفرض ستون اول رو برای محور x و ستون دوم رو برای محور y در نظر میگیره.

plot(mtcars[, c("disp", "mpg")])

میشه هم همونطور که قبل تر هم اشاره کردم به صورت دستی محور x و y رو مشخص کرد.

plot(mtcars$disp, mtcars$mpg)
scatter plot

خب! الان دیگه اسم محور ها بعد از تخصیص دستی خراب شد (درواقع همون ورودی ها رو معادل اسم در نظر گرفته). ولی مشکلی نیست. با استفاده از آرگومان های xlab و ylab میشه به این محور ها اسم داد.

plot(x = mtcars$disp, y = mtcars$mpg, xlab = "displacement", ylab = "miles per gallon")

مشکلمون حل شد!

یه نکته: اگر به این تابع صرفا یک مجموعه داده بدیم باز هم برای ما scatter رسم میکنه و اون مجموعه داده رو به عنوان داده‌های محور y و یک مجموعه اعداد متوالی رو هم به عنوان داده‌های محور x در نظر میگیره.

عنوان نمودار

با استفاده از آرگومان main میشه به یه شکل عنوان داد.

plot(x = mtcars$disp, y = mtcars$mpg, xlab = "displacement", ylab = "miles per gallon", main = "thedatascientist")

همینطور میشه با استفاده از آرگومان sub یک زیر نویس یا توضیح راجع به این نمودار ایجاد کرد.

plot(x = mtcars$disp, y = mtcars$mpg, xlab = "displacement", ylab = "miles per gallon", sub = "thedatascientist")
انواع چارت ها در Graphics

برای تغییر شکل چارت میشه از آرگومان type استفاده کرد. به طور کلی توی پکیج گرافیکس 9 تا چارت پایه‌ای برای ما وجود داره:

  • p: نقطه (point)
  • l: خط (line)
  • b: هم خط و هم نقطه (both)
  • c: خط چین (connecting segments of b)
  • o: خط و نقطه روی هم (overplotted)
  • h: هیستوگرام (histogram)
  • s: پله‌ای با نقطه پایان بالا (stair)
  • S: پله‌ای با نقطه شروع بالا (alternative stair)
  • n: فقط چار چوب چارت (none)

هرکدوم از این ها به این شکل کشیده میشن:

plot(x, y, type)

انواع نقاط

در این پکیج 25 مدل مختلف نقطه وجود داره که با استفاده از آرگومان pch (مخفف point character) مشخص میشه.

دقت بکنین که نقاط 21 تا 25 هم خودشون رنگ میگیرن و هم دورشون و اصطلاحا multi-color هستن. با استفاده از آرگومان bg (مخفف background) میشه اون رنگ داخلشون رو عوض کرد.

همینطور میشه یک کاراکتر به عنوان شکل نقطه به pch داد و توی نمودار همون کاراکتر نمایش داده میشه.

plot(1:10, pch = "@")

انواع خط

اگر نمودار ما به شکلی باشه که توی اون خط وجود داشته باشه، نوع اون خط ها رو هم میشه با استفاده از آرگومان lty (مخفف line type) مشخص کرد.

plot(1:10, type = "l", lty = 2)

اندازه و ضخامت

برای تعیین اندازه نقطه یا ضخامت خط هم میشه از آرگومان cex (که به نظرم مخفف character expansion یا یه همچین چیزی باید باشه!) استفاده کرد. این آرگومان اندازه پیشفرض کاراکتر رو در مقداری که ما بهش میدیم ضرب میکنه (کارکتر رو n برابر بزرگ یا کوچک میکنه)

plot(1:10, cex = 3)

صرفا جهت اطلاع! : ما برای اجزای دیگه نمودار هم میتونیم از cex استفاده کنیم. مثلا cex.axis، cex.lab، cex.main و cex.sub هم داریم که دیگه اونو خودتون تست کنین (محض تنبلی فراوان!).

رنگ‌‌‌‌‌‌‌‌ها

R به صورت پیشفرض 8 تا رنگ رو در نظر گرفته که با استفاده از آرگومان col میشه انتخابشون کرد

plot(x = mtcars$disp, y = mtcars$mpg, xlab = "displacement", ylab = "miles per gallon", col = 2)

البته R به نزدیک 650 رنگ اسم اختصاص داده که میشه اون هارو هم استفاده کرد (بعدا توی یک مطلب قرارشون میدم). همینطور چندین تا پالت رنگی (مثل rainbow، heat.colors، terrain.colors، topo.colors، cm.colors، grey و …) و پکیج colorBrewer هم وجود داره که میشه از اون‌ها هم استفاده کرد.

توی پست بعدی راجع به باقی پارامتر‌های این پکیج بیشتر صحبت میکنم.