Gpplot মধ্যে দিকের ক্রম স্থির করে


97

ডেটা:

df <- data.frame(
    type   = c("T", "F", "P", "T", "F", "P", "T", "F", "P", "T", "F", "P"), 
    size   = c("50%", "50%", "50%", "100%", "100%", "100%", "150%", "150%", "150%", "200%", "200%", "200%"),
    amount = c(48.4, 48.1, 46.8, 25.9, 26, 24.9, 21.1, 21.4, 20.1, 20.8, 21.5, 16.5)
)

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

 ggplot(df, aes(type, amount , fill=type, group=type, shape=type, facets=size)) + 
  geom_bar(width=0.5, position = position_dodge(width=0.6)) + 
  facet_grid(.~size) + 
  theme_bw() + 
  scale_fill_manual(values = c("darkblue","steelblue1","steelblue4"), 
                    labels = c("T", "F", "P"))

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

অর্ডার সমস্যা সমাধানের জন্য, আমি নিম্নলিখিতটি ব্যবহার করে চলক "টাইপ" এর জন্য একটি ফ্যাক্টর পদ্ধতি ব্যবহার করেছি। চিত্রটি দেখুন।

temp$new = factor(temp$type, levels=c("T","F","P"), labels=c("T","F","P")) 

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

তবে, এখন আমি ভেরিয়েবলের অর্ডার ঠিক করতে জানি না size। এটি 50%, 100% হওয়া উচিত। 150%, এবং 200%।

উত্তর:


148

আপনার ডেটা ফ্রেমে আপনার আকারকে একটি ফ্যাক্টর করে নিন:

temp$size_f = factor(temp$size, levels=c('50%','100%','150%','200%'))

তারপর পরিবর্তন facet_grid(.~size)করার জন্যfacet_grid(.~size_f)

তারপরে প্লট করুন: এখানে চিত্র বর্ণনা লিখুন

গ্রাফগুলি এখন সঠিক ক্রমে।


7

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

# the data
temp <- data.frame(type=rep(c("T", "F", "P"), 4),
                    size=rep(c("50%", "100%", "200%", "150%"), each=3), # cannot sort this
                    size_num = rep(c(.5, 1, 2, 1.5), each=3), # can sort this
                    amount=c(48.4, 48.1, 46.8, 
                             25.9, 26.0, 24.9,
                             20.8, 21.5, 16.5,
                             21.1, 21.4, 20.1))

temp %>% 
  arrange(size_num) %>% # sort
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>% # convert to factor

  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)

আপনি কেবল একটি একক, পছন্দসই অর্ডার বেছে নিতে পারেন তবে, আপনি দিকগুলি মধ্যে বারগুলি সাজানোর জন্য এই সমাধানটি প্রয়োগ করতে পারেন:

    temp %>% 
  arrange(size_num) %>%
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>%
  arrange(desc(amount)) %>%
  mutate_at(vars(type), funs(factor(., levels=unique(.)))) %>%
  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)


  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.