Ggplot2 এ [স্ক্র্যাটারপ্ল্লট অঞ্চলগুলি] প্রায় পরিষ্কার ঝাঁকুনি কীভাবে আঁকবেন


32

আমি কীভাবে একটি স্ক্যাটারপ্লোটে পয়েন্টের একটি গ্রুপের চারপাশে একটি ঝরঝরে বহুভুজ যুক্ত করব? আমি ggplot2 ব্যবহার করছি তবে ফলাফলের ফলে হতাশ geom_polygon

একটি ট্যাব-বিস্মৃত পাঠ্য ফাইল হিসাবে ডেটাসেটটি এখানে রয়েছে । নীচের গ্রাফটি একগুচ্ছ দেশগুলিতে স্বাস্থ্য এবং বেকারত্বের প্রতি দুটি পদক্ষেপের মনোভাব দেখায়:

ঘনত্ব 2d সহ স্ক্যাটারপ্লট

আমি geom_density2dকম অভিনব থেকে স্যুইচ করতে চাই তবে অনুগতভাবে আরও সঠিক geom_polygon। অচলিত ডেটাতে ফলাফল অসহায়:

এখানে চিত্র বর্ণনা লিখুন

আমি কীভাবে 'ঝরঝরে' বহুভুজগুলি আঁকব যা সর্বনিম্ন সর্বাধিক yx মানগুলির চারপাশে কনট্যুর পাথ হিসাবে আচরণ করে? আমি কোনও উপকারে ডেটা বাছাই করার চেষ্টা করেছি।

কোড:

print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))

dবস্তুর সঙ্গে প্রাপ্ত হয় এই CSV ফাইল

সমাধান:

ওয়েইন , অ্যান্ডি ডাব্লু এবং অন্যদের তাদের পয়েন্টারগুলির জন্য ধন্যবাদ ! ডেটা, কোড এবং গ্রাফগুলি গিটহাবে পোস্ট করা হয়েছে । ফলাফলটি এরকম দেখাচ্ছে:

ফলে


6
আপনি যে শব্দটির সন্ধান করতে পারেন তা হ'ল পয়েন্টগুলির উত্তল হাল (বা সম্ভাব্য আলফা হাল)। এগুলি গণনা করার জন্য আপনার কোনও আর ফাংশন সন্ধান করতে সক্ষম হওয়া উচিত এবং তারপরে সেগুলি প্লটের স্তর হিসাবে যুক্ত করতে সক্ষম হবেন।
অ্যান্ডি ডব্লিউ

সঠিক পরিভাষাটি নির্দেশ করার জন্য ধন্যবাদ! আমি ব্যবহারের করতে ব্যর্থ হয়েছে ?chullসঙ্গে ggplot2এতদূর। আমি নিশ্চিত নই যে আমি এটি সঠিকভাবে কোডিং করছি, এবং আশা করি কেউ ইতিমধ্যে এটি সম্পন্ন করেছে।
Fr.

আপনি কি আপনার আর কোডটি প্রশ্নের সাথে যুক্ত করতে পারবেন?
ইউরি পেট্রোভস্কি

একটি বিষয় লক্ষণীয়: আপনি যেটি প্রদর্শন করছেন তা হ'ল ম্যাক্সিমা, যা হতে পারে "বিদেশী" ers আমি বিশ্বাস করি আর প্যাকেজটি alphahullউত্তল হাল খোঁজার অনুরূপ কাজ করে, তবে আত্মবিশ্বাসের অন্তরগুলির মতো কিছু করার চেষ্টা করার জন্য আপনাকে এটি অভ্যন্তরীণ / বাহ্যিক দিকে সামঞ্জস্য করতে দেয়।
ওয়েইন

@ ওয়াইন, একটি আলফা হাল হ'ল আত্মবিশ্বাসের ব্যবধান নয় (কোনও উপায়ে কল্পনাও করা যায় না)। একটি সংক্ষিপ্ত বিবরণ এবং একটি আলফা হুল কি কিছু রেফারেন্সের জন্য এই gis.se প্রশ্নটি দেখুন । সম্ভবত আপনার দ্বিবিভক্ত আত্মবিশ্বাসের উপবৃত্তির চিন্তাভাবনা, বা এমনকি ব্যাগপ্লটস (বহিরাগতদের চিহ্নিত করার জন্য দ্বি-বৈকল্পিক বক্সপ্লট)।
অ্যান্ডি ডাব্লু

উত্তর:


33

কিছুটা গুগল করে আমি গোটা মোরোটার ওয়েবসাইট জুড়ে এসেছি যার কাছে ইতিমধ্যে তার ওয়েবসাইটে এটি করার উদাহরণ রয়েছে । নীচে সেই উদাহরণটি আপনার ডেটাতে প্রসারিত।

এখানে চিত্র বর্ণনা লিখুন

library(ggplot2)
work <- "E:\\Forum_Post_Stuff\\convex_hull_ggplot2"
setwd(work)

#note you have some missing data
mydata <- read.table(file = "emD71JT5.txt",header = TRUE, fill = TRUE)
nomissing <- na.omit(mydata) #chull function does not work with missing data

#getting the convex hull of each unique point set
df <- nomissing
find_hull <- function(df) df[chull(df$eff, df$man), ]
hulls <- ddply(df, "issue", find_hull)

plot <- ggplot(data = nomissing, aes(x = eff, y = man, colour=issue, fill = issue)) +
geom_point() + 
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Efficiency", y = "Mandate")
plot

ধন্যবাদ, আমি সেই অনুযায়ী কোডটি সংশোধন করব। দুর্ভাগ্যক্রমে, আপনার চিত্র ফাইলটি এখানে লোড হবে না বলে মনে হচ্ছে, তবে কোডটি এখানে রয়েছে।
Fr.

@Fr। , ঠিক সমস্যা কি?
অ্যান্ডি ডব্লিউ

@ অ্যানডাব্লিউ দুর্ভাগ্যক্রমে, কোডটি অনুপস্থিত মানগুলিকে সমর্থন করে না এবং এটি করার জন্য আমি এটির জন্য টুইট করার কোনও উপায় পাইনি।
Fr.

@ ফ্রা।, আপনি কীভাবে অবলম্বনগুলি বাদ দিয়ে ডেটা মানগুলি হ্যান্ডেল করতে চান? যে কোনও যুক্তিসঙ্গত অভিব্যক্তির কৌশলটি পয়েন্টগুলি অনুপস্থিত পর্যবেক্ষণগুলির উত্তল হালগুলির অভ্যন্তরে থাকবে
অ্যান্ডি ডব্লিউ

@ অ্যানডাব্লু আমার মানে হ'ল ফাংশনটি NAহত্যার চেষ্টা করুন chull। আমি এটি কেবল এটি উপেক্ষা করার প্রত্যাশা করব, তবে এটি করতে ব্যর্থ na.omit()হয়েছে এবং এটি কাজ করার জন্য আমি কোনও উপায় খুঁজে পেলাম না । আমি নিশ্চিত যে এটি সম্ভব, আমার কাছে আগের সমাধানের বাইরে যাওয়ার হ্যাকারি দক্ষতা নেই।
Fr.

8

যদি আমি আপনার সমস্যা বুঝতে, আপনি উত্তল জাহাজের কাঠাম খুঁজছেন healthএবং unemployment। আর এ করতে সম্ভবত বেশ কয়েকটি প্যাকেজ রয়েছে যার মধ্যে একটি হল প্যাকেজ geometry। আমি কল্পনা করতে পারি যে পয়েন্টগুলি ঘেরের চারপাশে সাজানো হয়েছে তবে আপনাকে এটি পরীক্ষা করে দেখতে হবে।

সম্পাদনা: এখানে একটি উদাহরণ রয়েছে যা ব্যবহার করে না ggplotতবে আমি আশা করি এটি কার্যকর useful chullডকুমেন্টেশনের উদাহরণটি ভুল বলে মনে হচ্ছে, যা আপনাকে ফেলে দিতে পারে:

X <- matrix(rnorm(2000), ncol = 2)
X.chull <- chull (X)
X.chull <- c(X.chull, X.chull[1])
plot (X)
lines (X[X.chull,])

সম্পাদনা 2: ঠিক আছে, এখানে ggplot2 ব্যবহার করে কিছু দেওয়া হচ্ছে। আমরা চালু Xএকটি মধ্যে data.frameভেরিয়েবল সঙ্গে xএবং y। তারপর:

library(ggplot2)
X <- as.data.frame(X)
hull <- chull(X)
hull <- c(hull, hull[1])
ggplot(X, aes(x=x, y=y)) + geom_polygon(data=X[hull,], fill="red") + geom_point()

নোট করুন যে ggplot থেকে geom_pointডেটা ( X) এবং এএস ব্যবহার করছে, যখন আমি এটিতে ওভাররাইড করছি geom_polygon

এটি সম্পূর্ণরূপে পেতে, আপনাকে উভয় ইস্যুর জন্য x এবং y লাগাতে হবে bar, তৃতীয় কলামটি issueপৃথক করার জন্য।


উত্তল হাল সম্পর্কে সঠিক। আমি chullউত্তল হাল তৈরি করতে ব্যবহার করার চেষ্টা করেছি তবে ফলাফলটি ব্যবহার করতে ব্যর্থ হয়েছি ggplot2
Fr.

@ ফ্র .: আমি আমার উত্তরের একটি দ্রুত সম্পাদনা করেছি। এটি আপনাকে সঠিক পথে রাখে কিনা দেখুন।
ওয়েন

আমি দেখতে পাচ্ছি যে এটি কীভাবে এটি নিজের কাজ করে তবে আমি কীভাবে শেষের লাইনটি পেতে পারি তা অবাক করি ggplot2
Fr.

@ ফ্র: ঠিক আছে, এখন কেমন?
ওয়েইন

এটা কাজ করেছে! ধন্যবাদ। আমাকে na.omitএনএ chullথেকে মুক্তি পেতে যোগ করতে হয়েছিল যা কাজ করা বন্ধ করে দেয়। আবার ধন্যবাদ.
Fr.

5

আজ বিকেলে, আমি chullএকটি geom_convexhullফাংশন হিসাবে একটি আর প্যাকেজ ভিতরে ফাংশন আবৃত করেছি ।

প্যাকেজটি লোড হয়ে গেলে, এটি অন্য কোনও রত্ন হিসাবে ব্যবহার করা যেতে পারে, আপনার ক্ষেত্রে এটি এমন কিছু হওয়া উচিত:

ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
  geom_convexhull(alpha=.5) + 
  geom_point() + 
  labs(x = "Efficiency", y = "Mandate"))

প্যাকেজটি গিথুবে উপলভ্য: https://github.com/cmartin/ggConvexHull


এটার জন্য অনেক ধন্যবাদ! আমি এটি chullনা পাওয়া পর্যন্ত একটি গ্রুপিং ফ্যাক্টর জুড়ে প্রয়োগ করার চেষ্টা করার সময় আমি অনাকাঙ্ক্ষিত আউটপুট থেকে হতাশ হয়ে পড়ছিলাম ।
জোগল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.