অনেক বেশি পয়েন্ট সহ স্কেটারপ্ল্লট


126

আমি দুটি ভেরিয়েবল প্লট করার চেষ্টা করছি যেখানে এন = 700 কে। সমস্যাটি হ'ল এখানে অত্যধিক ওভারল্যাপ রয়েছে, যাতে প্লটটি বেশিরভাগ ক্ষেত্রে কালো রঙের শক্ত ব্লক হয়ে যায়। গ্রাস্কেল "মেঘ" থাকার কোনও উপায় আছে যেখানে প্লটটির অন্ধকার কোনও অঞ্চলের পয়েন্টের সংখ্যার ফাংশন? অন্য কথায়, পৃথক পয়েন্টগুলি দেখানোর পরিবর্তে, আমি চাই যে কোনও অঞ্চলে পয়েন্টের সংখ্যা যত বেশি, সেই অঞ্চলটি আরও গা with় হবে এবং আমি এই প্লটটিকে একটি "মেঘ" হতে চাই।


4
দেখে মনে হচ্ছে আপনি হিটম্যাপটি সন্ধান করছেন: વહેহতাডটনা

উত্তর:


145

এটির সাথে মোকাবিলা করার একটি উপায় আলফা মিশ্রণ সহ যা প্রতিটি পয়েন্টকে কিছুটা স্বচ্ছ করে তোলে। সুতরাং অঞ্চলগুলি গাer় প্রদর্শিত হবে যা তাদের উপরে আরও পয়েন্ট প্লট করেছে।

এটি করা সহজ ggplot2:

df <- data.frame(x = rnorm(5000),y=rnorm(5000))
ggplot(df,aes(x=x,y=y)) + geom_point(alpha = 0.3)

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

এটির সাথে মোকাবিলা করার আর একটি সুবিধাজনক উপায় হ'ল (এবং আপনার পয়েন্টের সংখ্যার জন্য সম্ভবত আরও উপযুক্ত) হেক্সাগোনাল বিন্নিং:

ggplot(df,aes(x=x,y=y)) + stat_binhex()

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

এবং নিয়মিত পুরানো আয়তক্ষেত্রাকার বিনিং (চিত্র বাদ দেওয়া) রয়েছে যা আপনার traditionalতিহ্যবাহী হিটম্যাপের মতো:

ggplot(df,aes(x=x,y=y)) + geom_bin2d()

1
আমি কীভাবে রঙগুলি পরিবর্তন করতে পারি? আমি এখন নীল থেকে কালো স্কেল পাচ্ছি, যেখানে আমি রেজি, সবুজ নীল স্কেল পেতে চাই।
ব্যবহারকারী 1007742

@ ব্যবহারকারী 1007742 scale_fill_gradient()আপনার নিজের নিম্ন এবং উচ্চ রঙগুলি ব্যবহার করুন এবং নির্দিষ্ট করুন, বা scale_fill_brewer()ক্রমিক প্যালেটগুলির মধ্যে একটিটি ব্যবহার করুন এবং চয়ন করুন।
জোরান

@ জোর ধন্যবাদ, এখন এটি কাজ করছে। পয়েন্টের ধরন / আকার পরিবর্তন সম্পর্কে কীভাবে? আমি হেক্সাগন বা বর্গক্ষেত্র পাই। আমি শুধু সহজ বিন্দু চাই। আমি যখন জিওম_পয়েন্ট () ব্যবহার করি তা আমার ত্রুটি দেয়।
ব্যবহারকারী 1007742

1
@ ব্যবহারকারী 1007742 ঠিক আছে, একে কারণ হিসাবে "ষড়ভুজ বিন্নিং" বলা হয়! ;) এটি "পয়েন্টগুলি" ষড়যন্ত্র করছে না এটি সমগ্র অঞ্চলকে ষড়ভুজ (বা আয়তক্ষেত্রাকার) বিনগুলিতে বিভক্ত করছে এবং তারপরে সেই বিনের মধ্যে কতগুলি পয়েন্ট রয়েছে তার উপর ভিত্তি করে কেবল বিনগুলি রঙ করছে। সুতরাং সংক্ষিপ্ত উত্তরটি "আপনি পারবেন না"। আপনি যদি বিভিন্ন আকার চান তবে আপনাকে geom_point()প্রতিটি পৃথক পয়েন্ট ব্যবহার করতে হবে এবং প্লট করতে হবে ।
joran

আমার কাছে যদি 3 ডি ডেটা থাকে?
স্ক্যান

60

আপনি ggsubplotপ্যাকেজ এক নজর করতে পারেন । এই প্যাকেজটি এমন বৈশিষ্ট্যগুলি বাস্তবায়ন করে যা হ্যাডলি উইকহাম ২০১১ সালে ফিরে এসেছিলেন ( http://blog.revolutionanalytics.com/2011/10/ggplot2-for-big-data.html )।

(নীচে, আমি চিত্রের উদ্দেশ্যে "পয়েন্টগুলি" -যুক্তকে অন্তর্ভুক্ত করছি))

library(ggplot2)
library(ggsubplot)

# Make up some data
set.seed(955)
dat <- data.frame(cond = rep(c("A", "B"), each=5000),
                  xvar = c(rep(1:20,250) + rnorm(5000,sd=5),rep(16:35,250) + rnorm(5000,sd=5)),
                  yvar = c(rep(1:20,250) + rnorm(5000,sd=5),rep(16:35,250) + rnorm(5000,sd=5)))


# Scatterplot with subplots (simple)
ggplot(dat, aes(x=xvar, y=yvar)) +
  geom_point(shape=1) +
  geom_subplot2d(aes(xvar, yvar,
                     subplot = geom_bar(aes(rep("dummy", length(xvar)), ..count..))), bins = c(15,15), ref = NULL, width = rel(0.8), ply.aes = FALSE)

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

তবে এটি নিয়ন্ত্রণ করতে আপনার কাছে তৃতীয় ভেরিয়েবল থাকলে শিলাটি বৈশিষ্ট্যযুক্ত।

# Scatterplot with subplots (including a third variable) 

ggplot(dat, aes(x=xvar, y=yvar)) +
  geom_point(shape=1, aes(color = factor(cond))) +
  geom_subplot2d(aes(xvar, yvar,
                     subplot = geom_bar(aes(cond, ..count.., fill = cond))),
                 bins = c(15,15), ref = NULL, width = rel(0.8), ply.aes = FALSE)  

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

বা অন্য পদ্ধতির ব্যবহার হতে হবে smoothScatter():

smoothScatter(dat[2:3])

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


3
যে দ্বিতীয় চক্রান্ত মহান!
রিকার্ডো সাপোর্টা

আমার কাছে যদি 3 ডি ডেটা থাকে?
স্ক্যান

2
@ স্ক্যান: আপনি এটির জন্য একটি নতুন প্রশ্ন খুলতে পারেন।
majom

দুর্ভাগ্যক্রমে ggsubplot প্যাকেজটি আর রক্ষণাবেক্ষণ করা হয় না এবং ক্র্যান রেপো থেকে সরানো হয় ... আপনি কি কোনও বিকল্প প্যাকেজ সম্পর্কে জানেন যা উপরের প্রথম দুটিটির মতো প্লট তৈরি করতে ব্যবহৃত হতে পারে?
ডাইহেলস্টে

যদি আপনি আর & ggplot2 এর একটি পুরানো সংস্করণ ব্যবহার করেন তবে আপনার এটি কাজ করাতে সক্ষম হওয়া উচিত
majom

59

এতে বেশ কয়েকটি ভাল বিকল্পের একটি সংক্ষিপ্তসার ggplot2:

library(ggplot2)
x <- rnorm(n = 10000)
y <- rnorm(n = 10000, sd=2) + x
df <- data.frame(x, y)

বিকল্প একটি: স্বচ্ছ পয়েন্ট

o1 <- ggplot(df, aes(x, y)) +
  geom_point(alpha = 0.05)

বিকল্প বি: ঘনত্ব সূক্ষ্ম যোগ করুন

o2 <- ggplot(df, aes(x, y)) +
  geom_point(alpha = 0.05) +
  geom_density_2d()

বিকল্প সি: ভরাট ঘনত্ব সূক্ষ্ম যোগ করুন

o3 <- ggplot(df, aes(x, y)) +
  stat_density_2d(aes(fill = stat(level)), geom = 'polygon') +
  scale_fill_viridis_c(name = "density") +
  geom_point(shape = '.')

বিকল্প ডি: ঘনত্বের হিটম্যাপ

o4 <- ggplot(df, aes(x, y)) +
  stat_density_2d(aes(fill = stat(density)), geom = 'raster', contour = FALSE) +       
  scale_fill_viridis_c() +
  coord_cartesian(expand = FALSE) +
  geom_point(shape = '.', col = 'white')

বিকল্প ই: হেক্সবিনস

o5 <- ggplot(df, aes(x, y)) +
  geom_hex() +
  scale_fill_viridis_c() +
  geom_point(shape = '.', col = 'white')

বিকল্প এফ: রাগস

o6 <- ggplot(df, aes(x, y)) +
  geom_point(alpha = 0.1) +
  geom_rug(alpha = 0.01)

একটি চিত্রে একত্রিত করুন:

cowplot::plot_grid(
  o1, o2, o3, o4, o5, o6,
  ncol = 2, labels = 'AUTO', align = 'v', axis = 'lr'
)

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


1
এটি একটি খুব সুন্দর উত্তর দেওয়া উত্তর যা আমার কাছে মনে হয় কিছুটা বেশি ভোটের প্রাপ্য।
লালোচেজিয়া

স্কেল_ফিল_ভিআরিডিস_সি () তে আমাকে ত্রুটি দেয়: "স্কেল_ফিল_ভিআরিডিস_সি" ফাংশনটি খুঁজে পেল না
জাস্টগেটিন স্টারটেড

ggplot2 আপডেট হয়েছে, আবার ggplot2 ইনস্টল হয়েছে এবং ggplot2 পুনরায় লোড হয়েছে। ত্রুটিটি ঠিক করে নি। পৃথকভাবে 'ভাইরিডিস' প্যাকেজ ইনস্টল করা হয়েছে এবং এটি আমাকে 'স্কেল_ফিল_ভিরিডিস' ফাংশনটি ব্যবহার করতে দেয় তবে 'স্কেল_ফিল_ভিআরিডিস_সি' ফাংশনটি ব্যবহার করে না যা এখনও একই ত্রুটি দেয়
JustGettinStarted

ওহ আমি তোমাকে বিশ্বাস করি কোন সমস্যা নেই। কেবল ত্রুটির নীচে পৌঁছানোর চেষ্টা করছি।
জাস্টগেটিন স্টারটেড

51

আলফা মিশ্রণ বেস গ্রাফিকগুলি পাশাপাশি করা সহজ।

df <- data.frame(x = rnorm(5000),y=rnorm(5000))
with(df, plot(x, y, col="#00000033"))

এর পরে প্রথম ছয়টি সংখ্যা #হ'ল আরজিবি হেক্সের রঙ এবং শেষ দুটি অপরিষ্কার, আবার হেক্সে, তাই 33 ~ 3/16 তম অস্বচ্ছ।

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


20
কিছুটা প্রসঙ্গ যোগ করতে, "# 000000" হল রঙ কালো এবং "33" রঙের শেষে যুক্ত হওয়া অস্বচ্ছতার ডিগ্রি --- এখানে, 33%।
চার্লি

যুক্ত ব্যাখ্যার জন্য ধন্যবাদ।
অ্যারন

নিখুঁত জ্ঞান তোলে। ধন্যবাদ, হারুন এবং চার্লি উভয়ই।
ব্যবহারকারী 702432

12
গৌণ নোট; সংখ্যাগুলি হেক্সে তাই 33 আসলে 3/16 ম অস্বচ্ছ।
অ্যারন

45

আপনি ঘনত্বের কনট্যুর লাইনগুলিও ব্যবহার করতে পারেন ( ggplot2):

df <- data.frame(x = rnorm(15000),y=rnorm(15000))
ggplot(df,aes(x=x,y=y)) + geom_point() + geom_density2d()

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

বা আলফা মিশ্রণের সাথে ঘনত্বের সূত্রগুলি একত্রিত করুন:

ggplot(df,aes(x=x,y=y)) + 
    geom_point(colour="blue", alpha=0.2) + 
    geom_density2d(colour="black")

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


29

আপনি hexbinপ্যাকেজ দরকারী খুঁজে পেতে পারেন । এর সহায়তা পৃষ্ঠা থেকে hexbinplot:

library(hexbin)
mixdata <- data.frame(x = c(rnorm(5000),rnorm(5000,4,1.5)),
                      y = c(rnorm(5000),rnorm(5000,2,3)),
                      a = gl(2, 5000))
hexbinplot(y ~ x | a, mixdata)

hexbinplot


+1 হেক্সবিন হ'ল আমার পছন্দের সমাধান - এটি একটি বড় # পয়েন্ট নিতে পারে এবং তারপরে নিরাপদে একটি প্লট তৈরি করতে পারে। আমি নিশ্চিত নই যে অন্যরা প্লট তৈরির চেষ্টা করবে না, তবে প্রাক্তন পোস্টকে কেবল আলাদাভাবে শেড করবে।
ইটরেটর

থ্রিডি ডেটার জন্য হেক্সবিনের মতো কিছু?
স্ক্যান

8

geom_pointdenistyggpointdensityপ্যাকেজটি থেকে (সম্প্রতি লুকাশ ক্রেমার এবং সাইমন অ্যান্ডারস (2019) দ্বারা বিকাশ করা আপনাকে ঘনত্ব এবং স্বতন্ত্র ডেটা পয়েন্টগুলি একই সাথে কল্পনা করতে দেয়:

library(ggplot2)
# install.packages("ggpointdensity")
library(ggpointdensity)

df <- data.frame(x = rnorm(5000), y = rnorm(5000))
ggplot(df, aes(x=x, y=y)) + geom_pointdensity() + scale_color_viridis_c()


2

এই ধরণের ডেটা প্লট করার জন্য আমার প্রিয় পদ্ধতিটি এই প্রশ্নের মধ্যে বর্ণিত একটি - একটি ছড়িয়ে-ঘনত্বের প্লট । ধারণাটি একটি বিক্ষিপ্ত-প্লট করা কিন্তু তাদের ঘনত্বের দ্বারা পয়েন্টগুলি রঙ করা (মোটামুটিভাবে বলতে গেলে, সেই অঞ্চলে ওভারল্যাপের পরিমাণ)।

এটি একই সাথে:

  • স্পষ্টতই বিদেশীদের অবস্থান প্রদর্শন করে এবং
  • প্লটের ঘন অঞ্চলে যে কোনও কাঠামো প্রকাশ করে।

এখানে লিঙ্কযুক্ত প্রশ্নের শীর্ষ উত্তর থেকে ফলাফল:

বিক্ষিপ্ত-ঘনত্বের প্লট


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