R ggplot2: আমি facet_wrap এর সাথে একটি ভেরিয়েবলের মানের উপর নির্ভর করে y অক্ষের নাম কীভাবে দেব?


10

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

Repex:

ID <- c(1, 1, 2, 3, 3, 3)
cat <- c("Others", "Others", "Population", "Percentage", "Percentage", "Percentage")
logT <- c(2.7, 2.9, 1.5, 4.3, 3.7, 3.3)
m <- c(1.7, 1.9, 1.1, 4.8, 3.2, 3.5)
aggr <- c("median", "median", "geometric mean", "mean", "mean", "mean")
over.under <- c("overestimation", "overestimation", "underestimation", "underestimation", "underestimation", "underestimation")
data <- cbind(ID, cat, logT, m, aggr, over.under)
data <- data.frame(data)
data$ID <- as.numeric(data$ID)
data$logT<- as.numeric(data$logT)
data$m<- as.numeric(data$m)

কোড:

Fig <- data %>% ggplot(aes(x = logT, y = m, color = over.under)) + 
  facet_wrap(~ ID) +
  geom_point() +
  scale_x_continuous(name = "log (True value)", limits=c(1, 7)) +
  scale_y_continuous(name = NULL, limits=c(1, 7)) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  theme_bw() +
  theme(legend.position='none')
Fig

আমি প্রতিটি গ্রাফের y অক্ষের মান সহ লেবেল করতে চাই aggr। আইডি 1 এর জন্য এটি মিডিয়ান বলতে হবে, আইডি 2 জ্যামিতিক গড় এবং আইডি 3 মানে।

আমি একাধিক জিনিস চেষ্টা করেছি:

mtext(data1$aggr, side = 2, cex=1) #or
ylab(data1$aggr) #or
strip.position = "left"

কিন্তু এটি কাজ করে না।

আমি catগ্রাফের উপরের বাম কোণে যুক্ত করার চেষ্টা করছি । সুতরাং আইডি 1 "অন্য", আইডি 2 "জনসংখ্যা" এবং আইডি 3 "শতাংশ"। আমি কাজ করার চেষ্টা করেছি legend()কিন্তু আমি এখনও সমস্যার সমাধান করতে পারিনি।

উত্তর:


9

mtext এর জন্য বোঝানো হয়েছে plot()। ggplot হ'ল আরেকটি প্লট করার ব্যবস্থা তাই এটি কাজ করবে না। দুর্ভাগ্যক্রমে অনেকগুলি পছন্দ নয়, একটি উপায় হ'ল এক্স্ল্যাব সরানো, এবং স্ট্রিপটি y- অক্ষ হিসাবে ব্যবহার করুন:

LAB =tapply(as.character(data$aggr),data$ID,unique)

Fig <- data %>% ggplot(aes(x = logT, y = m, color = over.under)) + 
  geom_point() +
  scale_x_continuous(name = "log (True value)", limits=c(1, 7)) +
  scale_y_continuous(name = NULL, limits=c(1, 7)) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  theme_bw() +
  theme(legend.position='none') +
  facet_wrap(~ID, scales = "free_y",strip.position = "left", 
  labeller = as_labeller(LAB ))  +
  ylab(NULL) +
  theme(strip.background = element_blank(),strip.placement = "outside")

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

অন্য উপায় প্লট একত্রিত করা হয়:

library(gridExtra) 

plts = by(data,data$ID,function(i){
ggplot(i,aes(x=logT,y=m,color=over.under)) + 
geom_point() + 
scale_x_continuous(name = "log (True value)", limits=c(1, 7)) +
scale_y_continuous(name = unique(i$agg), limits=c(1, 7)) +
geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
theme_bw() + 
scale_color_manual(values=c("overestimation"="turquoise","underestimation"="orange"))+
theme(legend.position='none') 
})

grid.arrange(grobs=plts,ncol=3)

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


2

আমরা যদি IDফেসবুক লেবেলগুলির বিষয়ে চিন্তা করি তবে এটি আরও অনেক জটিল হয়ে যায় এবং এই উত্তরটি দ্বারা অনুপ্রাণিত হয় ।

প্রথমত, আমাদের প্লটের দুটি অনুলিপি তৈরি করতে হবে, একটি নাম পরিবর্তিত রেখাচিত্রমালা এবং একটি মূল সহ।

তারপরে আমরা অন্যটিতে ম্যানুয়ালি ফ্যাস্ট স্ট্রিপগুলি যুক্ত করব।

library(gtable)
library(grid)
plot1 <- data %>% ggplot(aes(x = logT, y = m, color = over.under)) + 
  facet_wrap(~ ID, scales = "free_y",strip.position = "left",  labeller = as_labeller(c(`1`="median",`2`="geometric mean",`3`="mean"))) +
  geom_point() +
  scale_x_continuous(name = "log (True value)", limits=c(1, 7)) +
  scale_y_continuous(name = NULL, limits=c(1, 7)) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  theme_bw() +  
  theme(legend.position='none',strip.background = element_blank(),strip.placement = "outside")

plot2 <- data %>% ggplot(aes(x = logT, y = m, color = over.under)) + 
  facet_grid(~ ID) +
  geom_point() +
  scale_x_continuous(name = "log (True value)", limits=c(1, 7)) +
  scale_y_continuous(name = NULL, limits=c(1, 7)) +
  geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
  theme_bw() +  
  theme(legend.position='none')

gt1 = ggplot_gtable(ggplot_build(plot1))
gt2 = ggplot_gtable(ggplot_build(plot2))
strip1 <- gtable_filter(gt2, 'strip-t-1')
strip2 <- gtable_filter(gt2, 'strip-t-2')
strip3 <- gtable_filter(gt2, 'strip-t-3')
gt1 = gtable_add_rows(gt1, heights=strip1$heights[1], pos = 0)
panel_id <- gt1$layout[grep('panel-.+1$', gt1$layout$name),]
gt1 = gtable_add_grob(gt1, strip1, t = 1, l = panel_id$l[1])
gt1 = gtable_add_grob(gt1, strip2, t = 1, l = panel_id$l[2])
gt1 = gtable_add_grob(gt1, strip3, t = 1, l = panel_id$l[3])
gt1 = gtable_add_grob(gt1, zeroGrob(), t = 1, l = 1)
gt1 = gtable_add_rows(gt1, heights=gt2$heights[1], pos = 0)
grid.newpage()
grid.draw(gt1)

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

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