۲۹ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

۱۲ پسوند ggplot برای گرافیک snazzier R

برای همه چیز، از طراحی متن و سفارشی‌سازی پالت‌های رنگ گرفته تا ایجاد geom‌های خود، این افزونه‌های ggplot2 شایسته جایگاهی در جعبه ابزار تجسم داده‌های R شما هستند. بعلاوه، یک لیست جایزه از بسته ها برای کاوش به تنهایی.

برای همه چیز، از طراحی متن و سفارشی‌سازی پالت‌های رنگ گرفته تا ایجاد geom‌های خود، این افزونه‌های ggplot2 شایسته جایگاهی در جعبه ابزار تجسم داده‌های R شما هستند. بعلاوه، یک لیست جایزه از بسته ها برای کاوش به تنهایی.

ggplot2 نه تنها محبوب‌ترین بسته تجسم داده در زبان R است، بلکه یک اکوسیستم است. بسته‌های الحاقی متعدد به ggplot قدرت بیشتری می‌دهند تا همه چیز را از تغییر آسان‌تر برچسب‌های محور گرفته تا تولید خودکار اطلاعات آماری و سفارشی‌سازی انجام دهد. . . تقریباً هر چیزی.

در اینجا ده ها افزونه عالی ggplot2 که باید بشناسید، همراه با کد نمونه و گرافیک آورده شده است. به عنوان یک امتیاز، فهرستی از بسته‌های اضافی را در انتهای مقاله قرار داده‌ام که ارزش کاوش دارند.

جئوم های خود را ایجاد کنید: ggpackets

هنگامی که چندین لایه و بهینه‌سازی به یک نمودار ggplot اضافه کردید، چگونه می‌توانید آن کار را ذخیره کنید تا استفاده مجدد از آن آسان باشد؟ یک راه این است که کد خود را به یک تابع تبدیل کنید. یکی دیگر این است که آن را به قطعه کد RStudio تبدیل کنید. اما بسته ggpackets یک راه دوستدار ggplot دارد: geom سفارشی خود را ایجاد کنید! به همان اندازه بی دردسر است که آن را در یک متغیر با استفاده از تابع ggpacket() ذخیره کنید.

کد مثال زیر یک نمودار میله‌ای از داده‌های بارش برف بوستون ایجاد می‌کند و دارای چندین خط سفارشی‌سازی است که می‌خواهم دوباره با داده‌های دیگر استفاده کنم. اولین بلوک کد، نمودار اولیه است:

library(ggplot2)
library(scales)
library(rio)
snowfall2000s <- import("https://gist.githubusercontent.com/smach/5544e1818a76a2cf95826b78a80fc7d5/raw/8fd7cfd8fa7b23cba5c13520f5f06580f4d9241c/boston_snowfall.2000s.csv")
ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  geom_col(color = "black", fill="#0072B2") +
  theme_minimal() +
  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), axis.line =
          element_line(colour = "gray"),
        plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5)
  ) +
  ylab("") + xlab("")

در اینجا نحوه تبدیل آن به یک geom سفارشی به نام my_geom_col آمده است:

library(ggpackets)
my_geom_col <- ggpacket() +
  geom_col(color = "black", fill="#0072B2") +
  theme_minimal() +
  theme(panel.border = element_blank(), panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(), axis.line =
          element_line(colour = "gray"),
        plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5)
  ) +
  ylab("") + xlab("")

توجه داشته باشید که من همه چیز را به جز اولین خط کد ggplot() نمودار اصلی در geom سفارشی ذخیره کردم.

استفاده از این geom جدید چقدر ساده است:

ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  my_geom_col()

نمودار نواری با نوارهای آبی

گراف ایجاد شده با geom سفارشی ggpackets.

ggpackets توسط Doug Kelkhoff است و در CRAN موجود است.

کد ساده تر ggplot2: ggblanket و دیگران

ggplot2 فوق‌العاده قدرتمند و قابل شخصی‌سازی است، اما گاهی اوقات این هزینه پیچیدگی دارد. هدف چندین بسته ساده‌سازی ggplot2 است، بنابراین تجسم‌های معمول داده‌ها ساده‌تر یا شهودی‌تر هستند.

اگر فراموش می‌کنید از کدام geom‌ها برای چه چیزی استفاده کنید، توصیه می‌کنم ggblanket را امتحان کنید. یکی از چیزهای مورد علاقه من در مورد بسته این است که col را ادغام می کند و زیبایی شناسی را در یک زیبایی رنگی واحد پر می کند، بنابراین دیگر نیازی به خاطر ندارم که از scale_fill_ یا scale_colour_ استفاده کنم. تابع.

یک مزیت دیگر ggblanket: geom های آن مانند gg_col() یا gg_point() شامل گزینه های سفارشی سازی در داخل خود توابع می شود به جای اینکه نیاز به جداگانه داشته باشد. لایه های. و این بدان معناست که من فقط باید به یک فایل راهنما نگاه کنم تا ببینم مواردی مانند pal برای تعریف یک پالت رنگ است و y_title به جای جستجوی راهنما، عنوان محور y را تنظیم می کند. فایل هایی برای چندین عملکرد جداگانه ggblanket ممکن است به خاطر سپردن همه آن گزینه ها را برای من آسان تر نکند، اما پیدا کردن آنها آسان تر است.

در اینجا نحوه ایجاد یک هیستوگرام از مجموعه داده پنگوئن‌های پالمر با ggblanket، (مثالی از وب‌سایت بسته گرفته شده است):

library(ggblanket)
library(palmerpenguins)
penguins |>
  gg_histogram(x = body_mass_g, col = species)

هیستوگرام با 3 رنگ و یک افسانه

هیستوگرام ایجاد شده با ggblanket.

نتیجه همچنان یک شی ggplot است، به این معنی که می‌توانید با افزودن لایه‌هایی با کد ggplot2 معمولی، به سفارشی کردن آن ادامه دهید.

ggblanket توسط David Hodge و در CRAN موجود است.

چند بسته دیگر سعی می‌کنند ggplot2 را ساده کرده و پیش‌فرض‌های آن را نیز تغییر دهند، از جمله ggcharts. توابع ساده شده آن از نحوی مانند

استفاده می کنند

library(ggcharts)
column_chart(snowfall2000s, x = Winter, y = Total)

این خط کد یک پیش‌فرض کاملاً مناسب و به‌علاوه نوارهای مرتب‌سازی خودکار ارائه می‌کند (شما به راحتی می‌توانید آن را لغو کنید).

گراف میله‌ای با نوارهای آبی مرتب‌شده بر اساس مقادیر صعودی

نمودار میله ای ایجاد شده با ggcharts به طور خودکار میله ها را بر اساس مقادیر مرتب می کند.

برای جزئیات بیشتر به آموزش ggcharts InfoWorld یا ویدیوی زیر مراجعه کنید.

سفارشی سازی متن ساده: ggeasy

ggeasy بر بخش “اصلی” dataviz شما – یعنی نوار تأثیر نمی گذارد /point/line اندازه ها، رنگ ها، سفارشات، و غیره. در عوض، همه چیز در مورد سفارشی کردن متن در اطراف نمودارها، مانند برچسب ها و قالب بندی محورها است. همه توابع ggeasy با easy_ شروع می‌شوند، بنابراین، بله، یافتن آنها با استفاده از تکمیل خودکار RStudio آسان است.

آیا باید عنوان طرح را در مرکز قرار دهید؟ easy_center_title(). آیا می خواهید برچسب های محور x را ۹۰ درجه بچرخانید؟ easy_rotate_labels(which = "x").

در مورد بسته در آموزش ggeasy InfoWorld یا ویدیوی زیر بیشتر بیاموزید.

ggeasy توسط جاناتان کارول و دیگران است و در CRAN موجود است.

موارد را در طرح های خود برجسته کنید: gghighlight

گاهی اوقات می خواهید توجه خود را به نقاط داده خاص در یک نمودار جلب کنید. مطمئناً می‌توانید این کار را تنها با ggplot انجام دهید، اما هدف gghighlight آسان‌تر کردن آن است. فقط تابع gghighlight() را به همراه یک شرط اضافه کنید. برای مثال، اگر زمستان‌هایی با بارش کل برف بالاتر از ۸۵ اینچ برای داستانی که می‌گویم مهم است، می‌توانم از gghighlight(Total > ۸۵) استفاده کنم:

library(gghighlight)
ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  my_geom_col() +
  gghighlight(Total > 85)

نمودار نواری با 2 نوار آبی برجسته و بقیه خاکستری.

نمودار با مجموع بیش از ۸۵ برجسته شده با استفاده از gghighliight.

یا اگر بخواهم سال‌های خاصی مانند ۲۰۱۱-۱۲ و ۲۰۱۴-۱۵ را فراخوانی کنم، می‌توانم آن‌ها را به عنوان شرط gghighlight() خود تنظیم کنم:

ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  my_geom_col() +
  gghighlight(Winter %in% c('2011-12', '2014-15'))

gghighlight توسط Hiroaki Yutani است و در CRAN در دسترس است.

افزودن تم یا پالت رنگ: ggthemes و موارد دیگر

اکوسیستم ggplot2 شامل تعدادی بسته برای افزودن تم ها و پالت های رنگی است. احتمالاً به همه آنها نیاز نخواهید داشت، اما ممکن است بخواهید در میان آنها مرور کنید تا مواردی را بیابید که دارای تم ها یا پالت هایی هستند که به نظر شما قانع کننده هستند.

پس از نصب یکی از این بسته‌ها، معمولاً می‌توانید از یک تم یا پالت رنگ جدید به همان روشی که از یک تم یا پالت داخلی ggplot2 استفاده می‌کنید استفاده کنید. در اینجا یک مثال با تم خورشیدی و پالت کور رنگی ggthemes آورده شده است:

library(ggthemes)
ggplot(penguins, aes(x = bill_length_mm, y = body_mass_g, color = species)) +
  geom_point() +
  ggthemes::theme_solarized() +
  scale_color_colorblind()

نقشه پراکنده با پس زمینه زرد کم رنگ

نقشه پراکنده با استفاده از یک پالت کور رنگ و طرح زمینه خورشیدی از بسته ggthemes.

ggthemes توسط جفری بی آرنولد و دیگران است و در CRAN موجود است.

سایر بسته‌های تم و پالت قابل بررسی:

ggsci مجموعه‌ای از پالت‌های رنگی ggplot2 است که از مجلات علمی، کتابخانه‌های تجسم داده‌ها، فیلم‌های علمی تخیلی الهام گرفته شده است. ، و نمایش های تلویزیونی” مانند scale_fill_lancet() و scale_color_startrek().

hrbrthemes یک بسته تم محبوب با تمرکز بر تایپوگرافی است.

ggthemr کمی کمتر از سایرین شناخته شده است، اما تم های زیادی دارد برای انتخاب از میان یک مخزن GitHub که مرور مضامین و دیدن ظاهر آنها را آسان می کند مانند.

bbplot فقط یک موضوع دارد، bbc_style()، انتشارات -سبک آماده بی بی سی، و همچنین تابع دوم برای ذخیره طرح برای انتشار، finalise_plot().

paletteer یک بسته متا است که پالت‌ها را از ده‌ها بسته پالت R جداگانه در یک بسته با یک رابط منفرد سازگار و این رابط شامل توابعی است که به طور خاص برای استفاده از ggplot، با نحوی مانند scale_color_paletteer_d("nord::aurora"). در اینجا nord نام بسته پالت اصلی، aurora نام palette خاص و _d است. نشان می دهد که این پالت برای مقادیر گسسته (نه پیوسته) است. پالت در ابتدا می تواند کمی طاقت فرسا باشد، اما تقریباً مطمئناً پالتی خواهید یافت که برای شما جذاب باشد.

توجه داشته باشید که می‌توانید از هر پالت رنگی R با ggplot استفاده کنید، حتی اگر دارای توابع مقیاس رنگی خاص ggplot نباشد، با توابع مقیاس دستی ggplot و مقادیر پالت رنگ، مانند < code>scale_color_manual(values=c(“#486030”, “#c03018”, “#f0a800”)).

افزودن رنگ و استایل های دیگر به متن ggplot2: ggtext

بسته ggtext از نحو علامت‌گذاری برای افزودن سبک‌ها و رنگ‌ها به متن در یک طرح استفاده می‌کند. برای مثال، زیرخط‌های اطراف متن، حروف کج اضافه می‌کنند و دو ستاره در اطراف متن، یک ظاهر برجسته ایجاد می‌کنند. برای اینکه این کار با ggtext به درستی کار کند، تابع element_markdown() بسته نیز باید به یک موضوع ggplot اضافه شود. نحو عبارت است از افزودن استایل علامت گذاری مناسب به متن و سپس element_markdown() به عنصر تم اضافه می شود، مانند این برای ایتالیک کردن یک زیرنویس:

library(ggtext)
ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  my_geom_col() +
  labs(title = "Annual Boston Snowfall", subtitle = "_2000 to 2016_") +
  theme(
    plot.subtitle = element_markdown()
  )

ggtext توسط Claus O. Wilke است و در CRAN موجود است.

انتقال عدم قطعیت: ggdist

ggdist برای تجسم توزیع داده‌ها و عدم قطعیت، geom‌هایی را اضافه می‌کند، و گرافیک‌هایی مانند نمودارهای ابر بارانی و نمودارهای لجیت را ایجاد می‌کند. با geom های جدید مانند stat_slab() و stat_dotsinterval(). در اینجا یک نمونه از وب سایت ggdist آورده شده است:

library(ggdist)
set.seed(12345) # for reproducibility
data.frame(
  abc = c("a", "b", "b", "c"),
  value = rnorm(200, c(1, 8, 8, 3), c(1, 1.5, 1.5, 1))
) %>%
  ggplot(aes(y = abc, x = value, fill = abc)) +
  stat_slab(aes(thickness = stat(pdf*n)), scale = 0.7) +
  stat_dotsinterval(side = "bottom", scale = 0.7, slab_size = NA) +
  scale_fill_brewer(palette = "Set2")

سه نمودار ابر باران، هرکدام رنگ متفاوت

نقشه ابر باران با بسته ggdist ایجاد شد.

برای جزئیات کامل و مثال‌های بیشتر، وب‌سایت ggdist را بررسی کنید. ggidst توسط متیو کی است و در CRAN در دسترس است.

افزودن تعامل به ggplot2: plotly و ggiraph

اگر نقشه‌های شما در وب هستند، ممکن است بخواهید آنها تعاملی باشند و ویژگی‌هایی مانند خاموش و روشن کردن سریال‌ها و نمایش داده‌های زیربنایی هنگام حرکت ماوس روی یک نقطه، خط یا نوار را ارائه دهند. هم طرح و هم ژیراف ggplots را به ویجت های تعاملی HTML تبدیل می کنند.

plotly، یک پوشش R برای کتابخانه جاوا اسکریپت plotly.js، استفاده از آن بسیار ساده است. تنها کاری که انجام می دهید این است که ggplot نهایی خود را در تابع ggplotly() بسته قرار دهید و این تابع یک نسخه تعاملی از نمودار شما را برمی گرداند. به عنوان مثال:

library(plotly)
ggplotly(
ggplot(snowfall2000s, aes(x = Winter, y = Total)) +
  geom_col() +
  labs(title = "Annual Boston Snowfall", subtitle = "2000 to 2016")
)

plotly با افزونه‌های دیگر، از جمله ggpackets و gghighlights کار می‌کند. نمودارهای plotly همیشه همه چیزهایی را که در یک نسخه ثابت ظاهر می‌شود شامل نمی‌شود (مثلاً در زمان نوشتن زیرنویس‌های ggplot2 را تشخیص نمی‌داد). اما این بسته برای تعامل سریع سخت است.

توجه داشته باشید که کتابخانه plotly یک تابع غیر مرتبط با ggplot نیز دارد، plot_ly()، که از نحوی شبیه به qplot() ggplot استفاده می کند:

plot_ly(snowfall2000s, x = ~Winter, y = ~Total, type = "bar")