Ggplot2 এ প্রান্তিক হিস্টোগ্রাম সহ স্কেটারপ্ল্লট


137

নীচের নমুনার মতোই প্রান্তিক হিস্টোগ্রামগুলি সহ স্ক্যাটারপ্লটগুলি তৈরি করার কোনও উপায় আছে কি ggplot2? মতলব এটি scatterhist()ফাংশন এবং আর এর জন্য সমতুল্য আছে। যাইহোক, আমি এটি ggplot2 এর জন্য দেখিনি।

প্রান্তিক হিস্টোগ্রাম সহ স্ক্যাটারপ্লট

আমি একক গ্রাফ তৈরি করে একটি প্রচেষ্টা শুরু করেছি তবে কীভাবে সেগুলি সঠিকভাবে সাজানো যায় তা আমি জানি না।

 require(ggplot2)
 x<-rnorm(300)
 y<-rt(300,df=2)
 xy<-data.frame(x,y)
     xhist <- qplot(x, geom="histogram") + scale_x_continuous(limits=c(min(x),max(x))) + opts(axis.text.x = theme_blank(), axis.title.x=theme_blank(), axis.ticks = theme_blank(), aspect.ratio = 5/16, axis.text.y = theme_blank(), axis.title.y=theme_blank(), background.colour="white")
     yhist <- qplot(y, geom="histogram") + coord_flip() + opts(background.fill = "white", background.color ="black")

     yhist <- yhist + scale_x_continuous(limits=c(min(x),max(x))) + opts(axis.text.x = theme_blank(), axis.title.x=theme_blank(), axis.ticks = theme_blank(), aspect.ratio = 16/5, axis.text.y = theme_blank(), axis.title.y=theme_blank() )


     scatter <- qplot(x,y, data=xy)  + scale_x_continuous(limits=c(min(x),max(x))) + scale_y_continuous(limits=c(min(y),max(y)))
none <- qplot(x,y, data=xy) + geom_blank()

এবং এখানে পোস্ট ফাংশন দিয়ে তাদের সাজানোর । তবে দীর্ঘ গল্প সংক্ষিপ্ত করতে: এই গ্রাফগুলি তৈরি করার কোনও উপায় আছে কি?


@ ডব্লিউ রাইট আপনাকে ধন্যবাদ - তবে আমি মনে করি যে এটি আমার প্রশ্নের সমাধানটি আমি দিয়েছি। তবে, আমি নীচে আপনার দেওয়া জিওম_রাগকে () খুব মনে করি!
সেব

1
: একটি সাম্প্রতিক ব্লগ পোষ্টের একই বিষয়ের অতিরিক্ত বৈশিষ্ট্যগুলিও উপস্থিত রয়েছে থেকে blog.mckuhn.de/2009/09/learning-ggplot2-2d-plot-with.html সৌন্দর্য এছাড়াও বেশ চমৎকার :)
Seb

: গ্রাফিক্স গ্যালারি জন্য নতুন ওয়েবসাইট gallery.r-enthusiasts.com
IRTFM

@ সাব আপনি জিগেক্সট্রা প্যাকেজ সম্পর্কে একটিটির কাছে "গৃহীত উত্তর" পরিবর্তন করতে পারেন যদি আপনি মনে করেন এটি বোধগম্য হয়
ডিনআটালি

উত্তর:


93

gridExtraপ্যাকেজ এখানে কাজ করা উচিত। প্রতিটি ggplot অবজেক্ট তৈরি করে শুরু করুন:

hist_top <- ggplot()+geom_histogram(aes(rnorm(100)))
empty <- ggplot()+geom_point(aes(1,1), colour="white")+
         theme(axis.ticks=element_blank(), 
               panel.background=element_blank(), 
               axis.text.x=element_blank(), axis.text.y=element_blank(),           
               axis.title.x=element_blank(), axis.title.y=element_blank())

scatter <- ggplot()+geom_point(aes(rnorm(100), rnorm(100)))
hist_right <- ggplot()+geom_histogram(aes(rnorm(100)))+coord_flip()

তারপরে গ্রিড.আরঞ্জ ফাংশনটি ব্যবহার করুন:

grid.arrange(hist_top, empty, scatter, hist_right, ncol=2, nrow=2, widths=c(4, 1), heights=c(1, 4))

পটভূমি


6
প্লেসমেন্টটি প্রদর্শনের জন্য 1+, তবে আপনি যদি অভ্যন্তরীণ স্ক্রটারটি প্রান্তিক হিস্টোগ্রামগুলির সাথে "লাইন আপ" করতে চান তবে আপনি এলোমেলোভাবে নমুনা পুনরায় না করা উচিত।
আইআরটিএফএম

1
তুমি ঠিক বলছো. যদিও তারা একই বিতরণ থেকে নমুনা পেয়েছে, সুতরাং প্রান্তিক হিস্টোগ্রামগুলি তাত্ত্বিকভাবে স্ক্যাটার প্লটের সাথে মেলে।
oeo4b

8
"তত্ত্ব" এ তারা asympototically "ম্যাচ" হবে; অনুশীলনে তারা কত বার মিলবে তা অসীম স্বল্প। জিপিপ্লট কলগুলিতে প্রদত্ত উদাহরণটি xy <- data.frame(x=rnorm(300), y=rt(300,df=2) )ব্যবহার করা এবং ব্যবহার করা খুব সহজ data=xy
আইআরটিএফএম

7
প্লটস অক্ষগুলি সাধারণত সঠিকভাবে প্রান্তিক না হওয়ায় আমি এই সমাধানটি সুপারিশ করব না। আশা করি ggplot2- এর ভবিষ্যতের সংস্করণগুলি অক্ষগুলি সারিবদ্ধ করা সহজ করবে, এমনকি প্লট প্যানেলের (যেমন জালায়িত কাস্টমাইজড গৌণ অক্ষের ফাংশনগুলির) পাশে কাস্টম টিকা দেওয়ার জন্য অনুমতি দেবে।
baptiste

9
না, তারা সাধারণভাবে তা করবে না। ggplot2 বর্তমানে অক্ষর লেবেলের পরিমাণের উপর নির্ভর করে পরিবর্তিত বিভিন্ন প্যানেলের প্রস্থের আউটপুট দেয় etc. ggExtra :: align.plots এ দেখুন অক্ষটি সারিবদ্ধ করার জন্য বর্তমানে প্রয়োজনীয় ধরণের হ্যাক দেখতে।
baptiste

115

এটি সম্পূর্ণরূপে প্রতিক্রিয়াশীল উত্তর নয় তবে এটি খুব সহজ। প্রান্তিক ঘনত্ব প্রদর্শন করার জন্য এবং স্বচ্ছতা সমর্থন করে এমন গ্রাফিকাল আউটপুটের জন্য কীভাবে আলফা স্তরগুলি ব্যবহার করতে হয় তা বিকল্প পদ্ধতি বর্ণনা করে:

scatter <- qplot(x,y, data=xy)  + 
         scale_x_continuous(limits=c(min(x),max(x))) + 
         scale_y_continuous(limits=c(min(y),max(y))) + 
         geom_rug(col=rgb(.5,0,0,alpha=.2))
scatter

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


5
ঘনত্ব প্রদর্শন করার জন্য এটি একটি আকর্ষণীয় উপায়। এই উত্তর যুক্ত করার জন্য ধন্যবাদ। :)
মিশেল

21
এটি লক্ষ করা উচিত যে এই পদ্ধতিটি প্রান্তিক হিস্টোগ্রামগুলি রাখার চেয়ে অনেক বেশি সাধারণ। প্রকৃতপক্ষে, প্রকাশিত নিবন্ধগুলিতে রাগের প্লটগুলি প্রচলিত যেখানে আমি প্রান্তিক হিস্টোগ্রামগুলির সাথে প্রকাশিত নিবন্ধটি কখনও দেখিনি।
শু ওয়াং

খুব আকর্ষণীয় এবং স্বজ্ঞাত বিকল্প উত্তর! এবং খুব সহজ! সঠিক উত্তরের চেয়ে এটি আরও বেশি ভোট পায় এতে অবাক হওয়ার কিছু নেই। আমার বোধগম্যতা এটি মূলত এক-মাত্রিক হিট ম্যাপ : রাগগুলি যেখানেই ভিড় জমায় সেখানে গা dark় । আমার একমাত্র উদ্বেগ হবে, হিটম্যাপের রেজোলিউশন হিস্টোগ্রামের মতো বেশি নয়। যেমন। যখন প্লটটি ছোট হয়, সমস্ত রাগগুলি একসাথে চেপে ধরা হবে, যা বিতরণটি বুঝতে অসুবিধা হয়। যদিও হিস্টোগ্রাম সীমাবদ্ধতায় ভোগে না। ধারণার জন্য ধন্যবাদ!
হংকবোঝু

94

এটি কিছুটা দেরিতে হতে পারে তবে আমি একটি প্যাকেজ তৈরি করার সিদ্ধান্ত নিয়েছি (ggExtra এটির জন্য ) কারণ এতে কিছুটা কোড জড়িত এবং এটি লেখার জন্য ক্লান্তিকর হতে পারে। প্যাকেজটি কিছু সাধারণ সমস্যাও সমাধান করার চেষ্টা করে যেমন শিরোনাম থাকলে বা পাঠ্যটি প্রসারিত করা সত্ত্বেও প্লটগুলি একে অপরের সাথে ইনলাইন থাকবে।

মৌলিক ধারণাটি এখানে উত্তরগুলি যা দিয়েছিল তার অনুরূপ, তবে এটি এর বাইরে কিছুটা যায়। কীভাবে 1000 পয়েন্টের এলোমেলো সেটগুলিতে প্রান্তিক হিস্টোগ্রাম যুক্ত করা যায় তার একটি উদাহরণ এখানে। আশা করা যায় এটি ভবিষ্যতে হিস্টোগ্রাম / ঘনত্ব প্লট যুক্ত করা আরও সহজ করে তোলে।

GgExtra প্যাকেজের লিঙ্ক

library(ggplot2)
df <- data.frame(x = rnorm(1000, 50, 10), y = rnorm(1000, 50, 10))
p <- ggplot(df, aes(x, y)) + geom_point() + theme_classic()
ggExtra::ggMarginal(p, type = "histogram")

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


1
প্যাকেজের জন্য অনেক ধন্যবাদ। এটি বক্সের বাইরে কাজ করে!
Herxbd

এই প্যাকেজটির সাথে রঙের ভিত্তিতে শ্রেণিবদ্ধ বস্তুর জন্য কি প্রান্তিক ঘনত্বের প্লটগুলি আঁকানো সম্ভব?
জিগজনাভি

না, এটির পক্ষে এ জাতীয় যুক্তি নেই
ডিনআটালি

1
@jjrr আমি নিশ্চিত না যে কী কাজ করছে না এবং আপনার কী সমস্যা হচ্ছে, তবে একটি নোটবুকে রেন্ডারিংয়ের বিষয়ে গিথুবের উপর একটি সাম্প্রতিক সমস্যা ছিল এবং এর একটি সমাধানও রয়েছে, এটি দরকারী github.com/daattali/ জিজিএক্সট্রা / সংখ্যা / 89
ডিনআটালি

1
@ জিগজনাভি, আপনি যদি এখনও রঙের সাথে প্রান্তিক ঘনত্বের প্লটগুলি বিভক্ত করার কোনও উপায় খুঁজছেন তবে জিগেক্সট্রা ০.৯: জিজিমার্জিনাল (পি, টাইপ = "ঘনত্ব", আকার = ৫, গ্রুপ কালার = সত্য)
মার্টিনজেজে

46

একটি সংযোজন, কেবল আমাদের পরে এটি করা লোকদের জন্য কিছু অনুসন্ধানের সময় বাঁচাতে।

কিংবদন্তি, অক্ষ লেবেল, অক্ষ পাঠ্য, টিকগুলি প্লটগুলি একে অপরের থেকে দূরে সরে যায়, সুতরাং আপনার প্লটটি কুৎসিত এবং বেমানান দেখাচ্ছে।

আপনি এই থিমের কিছু সেটিংস ব্যবহার করে এটি সংশোধন করতে পারেন,

+theme(legend.position = "none",          
       axis.title.x = element_blank(),
       axis.title.y = element_blank(),
       axis.text.x = element_blank(),
       axis.text.y = element_blank(), 
       plot.margin = unit(c(3,-5.5,4,3), "mm"))

এবং স্কেলগুলি সারিবদ্ধ করুন,

+scale_x_continuous(breaks = 0:6,
                    limits = c(0,6),
                    expand = c(.05,.05))

সুতরাং ফলাফলগুলি ঠিক দেখাবে:

একটি উদাহরণ


3
দেখতে এই সারিবদ্ধ চক্রান্ত প্যানেল করার জন্য একটি অধিক নির্ভরযোগ্য সমাধান জন্য
Baptiste

হ্যাঁ. আমার উত্তরটি পুরানো, @ ব্যাপটিস্ট প্রস্তাবিত সমাধানটি ব্যবহার করুন।
Lorinc Nyitrai

@ লরিনিকনাইট্রাই এই প্লটটি তৈরির জন্য আপনি কি আপনার কোডটি ভাগ করে নিতে পারেন? আমার একটি শর্ত আছে যেখানে আমি 2 গ্রুপের জন্য প্রান্তিক বিতরণ সহ জিজিপ্লাট 2-তে যথার্থ-রিকাল স্কেটার প্লট তৈরি করতে চাই তবে আমি 2 টি গোষ্ঠীর জন্য প্রান্তিক বিতরণ করতে অক্ষম। ধন্যবাদ
নবাবি

@ নিউবি, এই উত্তরটি 3 বছরের পুরানো, যতটা সম্ভব পুরানো। Rdocamentation.org/packages/gtable/versions/0.2.0/topics/gtable বা অনুরূপ কিছু ব্যবহার করুন ।
লরিনিক নিমিত্রাই

29

বন্ডেডডাস্টের জবাবের বিতরণের প্রান্তিক সূচকগুলির সাধারণ অনুভূতিতে খুব সামান্য পরিবর্তন ।

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

এই পাঁচটি সংখ্যা এইভাবে একটি বক্সপ্লটের সংখ্যাগত উপস্থাপনা। এটি কিছুটা জটিল কারণ অসম ব্যবধানে থাকা গ্রিড-লাইনগুলি নির্দেশ করে যে অক্ষগুলির একটি অ-রৈখিক স্কেল রয়েছে (উদাহরণস্বরূপ এগুলি লিনিয়ার)। গ্রিড লাইনগুলি বাদ দেওয়া বা তাদের নিয়মিত স্থানে থাকতে বাধ্য করা সবচেয়ে ভাল হবে এবং কেবল লেবেলগুলিকে পাঁচটি সংখ্যার সংক্ষিপ্তসার দেখাতে দিন।

x<-rnorm(300)
y<-rt(300,df=10)
xy<-data.frame(x,y)

require(ggplot2); require(grid)
# make the basic plot object
ggplot(xy, aes(x, y)) +        
  # set the locations of the x-axis labels as Tukey's five numbers   
  scale_x_continuous(limit=c(min(x), max(x)), 
                     breaks=round(fivenum(x),1)) +     
  # ditto for y-axis labels 
  scale_y_continuous(limit=c(min(y), max(y)),
                     breaks=round(fivenum(y),1)) +     
  # specify points
  geom_point() +
  # specify that we want the rug plot
  geom_rug(size=0.1) +   
  # improve the data/ink ratio
  theme_set(theme_minimal(base_size = 18))

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


12

বিভিন্ন গ্রুপের সাথে তুলনা করার সময় এই জাতীয় প্লটের কোনও সন্তোষজনক সমাধান না হওয়ায় আমি এটি করার জন্য একটি ফাংশন লিখেছি ।

এটি উভয় গোষ্ঠীভুক্ত এবং গ্রুপহীন ডেটার জন্য কাজ করে এবং অতিরিক্ত গ্রাফিকাল পরামিতি গ্রহণ করে:

marginal_plot(x = iris$Sepal.Width, y = iris$Sepal.Length)

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

marginal_plot(x = Sepal.Width, y = Sepal.Length, group = Species, data = iris, bw = "nrd", lm_formula = NULL, xlab = "Sepal width", ylab = "Sepal length", pch = 15, cex = 0.5)

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


9

আমি এই প্যাকেজটি পেয়েছি ( ggpubr) যা এই সমস্যার জন্য খুব ভালভাবে কাজ করে বলে মনে হচ্ছে এবং এটি ডেটা প্রদর্শন করার জন্য বেশ কয়েকটি সম্ভাবনা বিবেচনা করে।

প্যাকেজের লিঙ্কটি এখানে এবং আপনি এই লিঙ্কটিতে এটি ব্যবহার করার জন্য একটি দুর্দান্ত টিউটোরিয়াল পাবেন। সম্পূর্ণতার জন্য, আমি পুনরুত্পাদন করা উদাহরণগুলির একটি সংযুক্ত করি।

আমি প্রথম প্যাকেজ ইনস্টল করেছি (এটি প্রয়োজন devtools)

if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")

বিভিন্ন গোষ্ঠীগুলির জন্য বিভিন্ন হিস্টোগ্রাম প্রদর্শন করার বিশেষ উদাহরণের সাথে, এটির সাথে সম্পর্কযুক্ত উল্লেখ করে ggExtra: "এর একটি সীমাবদ্ধতা ggExtraহ'ল এটি স্ক্যাটার প্লট এবং প্রান্তিক প্লটের একাধিক গ্রুপের সাথে লড়াই করতে পারে না below নীচের আর কোডে, আমরা একটি সরবরাহ করি cowplotপ্যাকেজ ব্যবহার করে সমাধান । " আমার ক্ষেত্রে, আমাকে পরবর্তী প্যাকেজটি ইনস্টল করতে হয়েছিল:

install.packages("cowplot")

এবং আমি কোডটির এই অংশটি অনুসরণ করেছি:

# Scatter plot colored by groups ("Species")
sp <- ggscatter(iris, x = "Sepal.Length", y = "Sepal.Width",
            color = "Species", palette = "jco",
            size = 3, alpha = 0.6)+
border()                                         
# Marginal density plot of x (top panel) and y (right panel)
xplot <- ggdensity(iris, "Sepal.Length", fill = "Species",
               palette = "jco")
yplot <- ggdensity(iris, "Sepal.Width", fill = "Species", 
               palette = "jco")+
rotate()
# Cleaning the plots
sp <- sp + rremove("legend")
yplot <- yplot + clean_theme() + rremove("legend") 
xplot <- xplot + clean_theme() + rremove("legend")
# Arranging the plot using cowplot
library(cowplot)
plot_grid(xplot, NULL, sp, yplot, ncol = 2, align = "hv", 
      rel_widths = c(2, 1), rel_heights = c(1, 2))

যা আমার পক্ষে ভাল কাজ করেছে:

আইরিস প্রান্তিক হিস্টোগ্রাম স্ক্যাটারপ্ল্লট সেট করে

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


মাঝখানে প্লটটি বর্গাকার করতে আপনাকে কী করতে হবে?
জ্যাকুয়েন্ট

আপনি বিন্দু আকার বলতে চাইছেন? যুক্তি যুক্ত করার চেষ্টা করুন shape = 19মধ্যে ggscatter। আকারগুলির জন্য এখানে
আলফ পাসকু

7

আপনি খুব সহজেই জিজিস্ট্যাটসপ্লট ব্যবহার করে প্রান্তিক হিস্টোগ্রামগুলি সহ আকর্ষণীয় স্ক্রেটারপ্লট তৈরি করতে পারেন (এটি কোনও মডেলের সাথে মাপসই করা এবং এটি বর্ণনা করবে):

data(iris)

library(ggstatsplot)

ggscatterstats(
  data = iris,                                          
  x = Sepal.Length,                                                  
  y = Sepal.Width,
  xlab = "Sepal Length",
  ylab = "Sepal Width",
  marginal = TRUE,
  marginal.type = "histogram",
  centrality.para = "mean",
  margins = "both",
  title = "Relationship between Sepal Length and Sepal Width",
  messages = FALSE
)

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

বা কিছুটা বেশি আবেদনময়ী (ডিফল্টরূপে) জিজিপুবার :

devtools::install_github("kassambara/ggpubr")
library(ggpubr)

ggscatterhist(
  iris, x = "Sepal.Length", y = "Sepal.Width",
  color = "Species", # comment out this and last line to remove the split by species
  margin.plot = "histogram", # I'd suggest removing this line to get density plots
  margin.params = list(fill = "Species", color = "black", size = 0.2)
)

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

হালনাগাদ:

@ অ্যাকলে দ্বারা প্রস্তাবিত হিসাবে আমি প্লটটি তৈরি করতে বিকাশের সংস্করণটি ব্যবহার করেছি।


1
এক্স-অ্যাক্সেসের কেবল একটি অনুলিপি হওয়ায় y-axis এ হিস্টোগ্রামটি ভুল। এটি কেবলমাত্র github.com/kassambara/ggpubr/issues/85 এ স্থির করা হয়েছে ।
অ্যাকলে

7

এটি একটি পুরানো প্রশ্ন, তবে আমি ভেবেছিলাম যে সম্প্রতি একটি সমস্যা পোস্ট করার পরে আমি এখানে একটি আপডেট পোস্ট করা কার্যকর হবে (সহায়তার জন্য স্টেফানি মুয়েলারের ধন্যবাদ!)।

গ্রিডেক্সট্রা ব্যবহার করে সর্বাধিক উত্সাহিত উত্তর, তবে অক্ষগুলি সারিবদ্ধ করা কঠিন / হ্যাকি, যেমন মন্তব্যগুলিতে উল্লেখ করা হয়েছে। এটি এখন ggExtra প্যাকেজ থেকে ggMarginal কমান্ড ব্যবহার করে সমাধান করা যেতে পারে:

#load packages
library(tidyverse) #for creating dummy dataset only
library(ggExtra)

#create dummy data
a = round(rnorm(1000,mean=10,sd=6),digits=0)
b = runif(1000,min=1.0,max=1.6)*a
b = b+runif(1000,min=9,max=15)

DummyData <- data.frame(var1 = b, var2 = a) %>% 
  filter(var1 > 0 & var2 > 0)

#plot
p = ggplot(DummyData, aes(var1, var2)) + geom_point(alpha=0.3)
ggMarginal(p, type = "histogram")

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


ঠিক বুঝতে পেরেছি যে এটি অন্য উত্তরটিতে মূল ggExtra প্যাকেজ বিকাশকারী পোস্ট করেছেন। পরিবর্তে সেই গ্রহণযোগ্য উত্তরটি তৈরি করার পরামর্শ দেব, যে কারণে আমি উপরে ব্যাখ্যা করেছি!
ভিক্টোরিয়া আউয়ুং

6

আমি এই বিকল্পগুলি চেষ্টা করেছিলাম, তবে ফলাফল বা সন্তুষ্ট কোডের দ্বারা সন্তুষ্ট ছিল না যে কোনওটি সেখানে পৌঁছানোর জন্য প্রয়োজন। ভাগ্যবান আমার, টমাস লিন পেডারসন সবেমাত্র প্যাচওয়ার্ক নামে একটি প্যাকেজ তৈরি করেছেন , যা কাজটি বেশ মার্জিত উপায়ে সম্পন্ন করে।

আপনি যদি প্রান্তিক হিস্টোগ্রাম সহ একটি স্ক্র্যাটারপ্লট তৈরি করতে চান তবে প্রথমে আপনাকে এই তিনটি প্লট আলাদাভাবে তৈরি করতে হবে।

library(ggplot2)

x <- rnorm(300)
y <- rt(300, df = 2)
xy <- data.frame(x, y)

plot1 <- ggplot(xy, aes(x = x, y = y)) + 
  geom_point() 

dens1 <- ggplot(xy, aes(x = x)) + 
  geom_histogram(color = "black", fill = "white") + 
  theme_void()

dens2 <- ggplot(xy, aes(x = y)) + 
  geom_histogram(color = "black", fill = "white") + 
  theme_void() + 
  coord_flip()

কেবলমাত্র কাজটি হ'ল, সেই প্লটগুলিকে একটি সাধারণ যুক্ত করা +এবং ফাংশনটির সাথে বিন্যাস নির্দিষ্ট করা plot_layout()

library(patchwork)

dens1 + plot_spacer() + plot1 + dens2 + 
  plot_layout(
    ncol = 2, 
    nrow = 2, 
    widths = c(4, 1),
    heights = c(1, 4)
  ) 

ফাংশন plot_spacer()উপরের ডানদিকে একটি খালি প্লট যুক্ত করে। অন্য সমস্ত যুক্তি স্ব-বর্ণনামূলক হওয়া উচিত।

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

যেহেতু হিস্টোগ্রামগুলি ভারীভাবে নির্বাচিত দ্বিবিধের উপর নির্ভর করে, তাই কেউ ঘনত্বের প্লটকে পছন্দ করতে পারে। কিছু ছোট পরিবর্তন দ্বারা একটি যেমন চোখের ট্র্যাকিং ডেটার জন্য একটি সুন্দর প্লট পাবেন।

library(ggpubr)

plot1 <- ggplot(df, aes(x = Density, y = Face_sum, color = Group)) + 
  geom_point(aes(color = Group), size = 3) + 
  geom_point(shape = 1, color = "black", size = 3) + 
  stat_smooth(method = "lm", fullrange = TRUE) +
  geom_rug() + 
  scale_y_continuous(name = "Number of fixated faces", 
                     limits = c(0, 205), expand = c(0, 0)) + 
  scale_x_continuous(name = "Population density (lg10)", 
                     limits = c(1, 4), expand = c(0, 0)) + 
  theme_pubr() +
  theme(legend.position = c(0.15, 0.9)) 

dens1 <- ggplot(df, aes(x = Density, fill = Group)) + 
  geom_density(alpha = 0.4) + 
  theme_void() + 
  theme(legend.position = "none")

dens2 <- ggplot(df, aes(x = Face_sum, fill = Group)) + 
  geom_density(alpha = 0.4) + 
  theme_void() + 
  theme(legend.position = "none") + 
  coord_flip()

dens1 + plot_spacer() + plot1 + dens2 + 
  plot_layout(ncol = 2, nrow = 2, widths = c(4, 1), heights = c(1, 4))

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

যদিও এই মুহুর্তে ডেটা সরবরাহ করা হয়নি তবে অন্তর্নিহিত নীতিগুলি পরিষ্কার হওয়া উচিত।


4

@ আলফ-পাসকু দ্বারা উত্তরটি তৈরির জন্য, প্রতিটি প্লটটি ম্যানুয়ালি সেট আপ করা এবং cowplotমূল এবং প্রান্তিক প্লট উভয় (অন্যান্য সমাধানগুলির তুলনায়) উভয়ের ক্ষেত্রে অনুদানের সাথে অনেকগুলি নমনীয়তার ব্যবস্থা করা । গ্রুপ দ্বারা বিতরণ একটি উদাহরণ। মূল প্লটটি 2 ডি-ডেনসিটির প্লটে পরিবর্তন করা অন্যটি।

নিম্নলিখিতটি প্রান্তিক হিস্টোগ্রাম সহ একটি স্ক্র্যাপপ্লট তৈরি করে (সঠিকভাবে সংযুক্ত)

library("ggplot2")
library("cowplot")

# Set up scatterplot
scatterplot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  geom_point(size = 3, alpha = 0.6) +
  guides(color = FALSE) +
  theme(plot.margin = margin())


# Define marginal histogram
marginal_distribution <- function(x, var, group) {
  ggplot(x, aes_string(x = var, fill = group)) +
    geom_histogram(bins = 30, alpha = 0.4, position = "identity") +
    # geom_density(alpha = 0.4, size = 0.1) +
    guides(fill = FALSE) +
    theme_void() +
    theme(plot.margin = margin())
}

# Set up marginal histograms
x_hist <- marginal_distribution(iris, "Sepal.Length", "Species")
y_hist <- marginal_distribution(iris, "Sepal.Width", "Species") +
  coord_flip()

# Align histograms with scatterplot
aligned_x_hist <- align_plots(x_hist, scatterplot, align = "v")[[1]]
aligned_y_hist <- align_plots(y_hist, scatterplot, align = "h")[[1]]

# Arrange plots
plot_grid(
  aligned_x_hist
  , NULL
  , scatterplot
  , aligned_y_hist
  , ncol = 2
  , nrow = 2
  , rel_heights = c(0.2, 1)
  , rel_widths = c(1, 0.2)
)

প্রান্তিক হিস্টোগ্রাম সহ স্ক্যাটারপ্লট

পরিবর্তে 2D-ঘনত্বের প্লট প্লট করতে কেবল মূল প্লটটি পরিবর্তন করুন।

# Set up 2D-density plot
contour_plot <- ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, color = Species)) +
  stat_density_2d(aes(alpha = ..piece..)) +
  guides(color = FALSE, alpha = FALSE) +
  theme(plot.margin = margin())

# Arrange plots
plot_grid(
  aligned_x_hist
  , NULL
  , contour_plot
  , aligned_y_hist
  , ncol = 2
  , nrow = 2
  , rel_heights = c(0.2, 1)
  , rel_widths = c(1, 0.2)
)

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


3

ব্যবহার করে আরেকটি সমাধান ggpubrএবং cowplotতবে এখানে আমরা প্লটগুলি ব্যবহার করে তৈরি করি cowplot::axis_canvasএবং এগুলি সাথে মূল প্লটে যুক্ত করব cowplot::insert_xaxis_grob:

library(cowplot) 
library(ggpubr)

# Create main plot
plot_main <- ggplot(faithful, aes(eruptions, waiting)) +
  geom_point()

# Create marginal plots
# Use geom_density/histogram for whatever you plotted on x/y axis 
plot_x <- axis_canvas(plot_main, axis = "x") +
  geom_density(aes(eruptions), faithful)
plot_y <- axis_canvas(plot_main, axis = "y", coord_flip = TRUE) +
  geom_density(aes(waiting), faithful) +
  coord_flip()

# Combine all plots into one
plot_final <- insert_xaxis_grob(plot_main, plot_x, position = "top")
plot_final <- insert_yaxis_grob(plot_final, plot_y, position = "right")
ggdraw(plot_final)

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


2

আজকাল, কমপক্ষে একটি সিআরএন প্যাকেজ রয়েছে যা এর প্রান্তিক হিস্টোগ্রামগুলি দিয়ে স্ক্যাটারপ্লট তৈরি করে।

library(psych)
scatterHist(rnorm(1000), runif(1000))

স্ক্যাটারহিস্ট থেকে নমুনা প্লট


0

আপনি ইন্টারেক্টিভ ফর্মটি ব্যবহার করতে পারেন ggExtra::ggMarginalGadget(yourplot) এবং বক্সপ্লট, বেহালা প্লট, ঘনত্ব প্লট এবং হিস্টোগ্রামগুলির মধ্যে সহজ চয়ন করতে পারেন easy

সে রকমই

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