ggplot2 এ দুটি কলাম দ্বারা গ্রুপ করুন


91

দুটি কলাম দ্বারা গ্রুপ করা সম্ভব? তাহলে ক্রস পণ্যটি আঁকা geom_point()এবং geom_smooth()?

উদাহরণ স্বরূপ:

frame <- data.frame(
 series <- rep(c('a', 'b'), 6), 
 sample <- rep(c('glass','water', 'metal'), 4), 
 data <- c(1:12))

ggplot(frame, aes()) # ...

যেমন পয়েন্ট 6এবং 12একটি গ্রুপ ভাগ, কিন্তু সঙ্গে 3

উত্তর:


32

কেন কেবল pasteসেই দুটি কলাম একসাথে নয় এবং সেই পরিবর্তনশীলটিকে গ্রুপ হিসাবে ব্যবহার করবে না কেন ?

frame$grp <- paste(frame[,1],frame[,2])

এটি করার আরও কিছুটা আনুষ্ঠানিক উপায় হ'ল ফাংশনটি ব্যবহার করা interaction


27
আমি মনে করি আপনি data.frameএকটি প্লটের উদ্দেশ্যে আপনার সংশোধন করবেন না । plotআপনার df প্রয়োগ এবং বিপরীত প্লটে বিভক্ত করা উচিত নয়।
ক্লিমেন্টওয়াল্টার

4
আমি সম্মত, ব্লু ম্যাজিস্টরের উত্তর আরও ভাল।
জেস্টন

6
@ ক্লেম্লেফ্লেমমে আমি মনে করি ব্লুমিজিস্টারের উত্তরটি ঠিক আছে, যদিও আমি মনে করি যে এই ক্ষেত্রে পার্থক্যটি খুব সামান্য। তবে সাধারণভাবে অবস্থান যে এক একটি চক্রান্ত আপনার ডেটা ফ্রেম পরিবর্তন করা উচিত নয় ব্যবহার করার জন্য আপনার চয়েস দেওয়া একটি অদ্ভুত এক ggplot2 , সমগ্র নকশা যার স্পষ্টভাবে ggplot এর শব্দার্থবিদ্যা সঙ্গে কাজ করার আপনার তথ্য structuring উপর premised করা হয়।
জোরান

এর অসুবিধা pasteহ'ল যখন ইনপুটটি একটি ফ্যাক্টর হয়, তখন এটি স্তরগুলি ত্যাগ করে, যেখানে interactionমূল কারণগুলির ক্রম সংরক্ষণ করে। এর অর্থ এই যে গ্রুপগুলিকে আরও স্বাভাবিকভাবেই interactionপদ্ধতির সাথে আদেশ করা হয়েছে ।
কোটা মরি

174

এই প্রশ্ন থেকে উদাহরণ গ্রহণ করে , interactionদুটি কলামকে একটি নতুন ফ্যাক্টারে একত্রিত করে ব্যবহার করে :

# Data frame with two continuous variables and two factors 
set.seed(0)
x <- rep(1:10, 4)
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5)
treatment <- gl(2, 20, 40, labels=letters[1:2])
replicate <- gl(2, 10, 40)
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate)

ggplot(d, aes(x=x, y=y, colour=treatment, shape = replicate,
  group=interaction(treatment, replicate))) + 
  geom_point() + geom_line()

ggplot উদাহরণ


এটি আমার জন্য কাজ করে:ggplot(df) + geom_violin(aes(class1, metric.var, group = interaction(class1, class2)), position = position_dodge(width=.5))
ivan866

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.