Ggplot2 এ স্ট্যাক করা বার চার্টে ডেটা মান দেখানো হচ্ছে


112

আমি ggplot2 এ স্ট্যাক করা বার চার্টে ডেটা মানগুলি দেখাতে চাই। এখানে আমার চেষ্টা করা কোড

Year      <- c(rep(c("2006-07", "2007-08", "2008-09", "2009-10"), each = 4))
Category  <- c(rep(c("A", "B", "C", "D"), times = 4))
Frequency <- c(168, 259, 226, 340, 216, 431, 319, 368, 423, 645, 234, 685, 166, 467, 274, 251)
Data      <- data.frame(Year, Category, Frequency)
library(ggplot2)
p <- qplot(Year, Frequency, data = Data, geom = "bar", fill = Category,     theme_set(theme_bw()))
p + geom_text(aes(label = Frequency), size = 3, hjust = 0.5, vjust = 3, position =     "stack") 

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

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



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

উত্তর:


193

ggplot 2.2.0লেবেল থেকে সহজেই position = position_stack(vjust = 0.5)ইন ব্যবহার করে স্ট্যাক করা যায় geom_text

ggplot(Data, aes(x = Year, y = Frequency, fill = Category, label = Frequency)) +
  geom_bar(stat = "identity") +
  geom_text(size = 3, position = position_stack(vjust = 0.5))

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

এছাড়াও নোট করুন যে " position_stack()এবং position_fill()এখন গ্রুপিংয়ের বিপরীত ক্রমে মানগুলি স্ট্যাক করে, যা ডিফল্ট স্ট্যাক অর্ডারটি কিংবদন্তীর সাথে মিলে যায়" "


পুরানো সংস্করণগুলির জন্য বৈধ উত্তর ggplot:

এখানে একটি পন্থা দেওয়া হয়েছে, যা বারগুলির মধ্যম পয়েন্টগুলি গণনা করে।

library(ggplot2)
library(plyr)

# calculate midpoints of bars (simplified using comment by @DWin)
Data <- ddply(Data, .(Year), 
   transform, pos = cumsum(Frequency) - (0.5 * Frequency)
)

# library(dplyr) ## If using dplyr... 
# Data <- group_by(Data,Year) %>%
#    mutate(pos = cumsum(Frequency) - (0.5 * Frequency))

# plot bars and add text
p <- ggplot(Data, aes(x = Year, y = Frequency)) +
     geom_bar(aes(fill = Category), stat="identity") +
     geom_text(aes(label = Frequency, y = pos), size = 3)

ফলাফলযুক্ত চার্ট


এই উত্তরের জন্য ধন্যবাদ। আমি এটির data.tableপরিবর্তে এটি একইভাবে করতে ব্যবহার করেছি plyr, সুতরাং এর মতো কিছু:Data.dt[,list(Category, Frequency, pos=cumsum(Frequency)-0.5*Frequency), by=Year]
পারমাণবিক

মোটামুটিভাবে ফ্রিকোয়েন্সি যোগ করার মতো কোনও উপায় আছে কি?
পাবলো ওলমোস ডি আগুইলেরা সি

26

হ্যাডলি যেমন উল্লেখ করেছেন যে সজ্জিত বার চার্টে লেবেলের চেয়ে আপনার বার্তাটি যোগাযোগের আরও কার্যকর উপায় রয়েছে। আসলে, স্ট্যাকযুক্ত চার্টগুলি খুব কার্যকর নয় কারণ বারগুলি (প্রতিটি বিভাগ) একটি অক্ষর ভাগ করে না তাই তুলনা করা শক্ত is

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

library(grid)
library(gridExtra)
library(plyr)

# create a new column with proportions
prop <- function(x) x/sum(x)
Data <- ddply(Data,"Year",transform,Share=prop(Frequency))

# create the component graphics
totals <- ggplot(Data,aes(Year,Frequency)) + geom_bar(fill="darkseagreen",stat="identity") + 
  xlab("") + labs(title = "Frequency totals in given Year")
proportion <- ggplot(Data, aes(x=Year,y=Share, group=Category, colour=Category)) 
+ geom_line() + scale_y_continuous(label=percent_format())+ theme(legend.position = "bottom") + 
  labs(title = "Proportion of total Frequency accounted by each Category in given Year")

# bring them together
grid.arrange(totals,proportion)

এটি আপনাকে এর মতো একটি 2 প্যানেল প্রদর্শন দেবে:

উল্লম্বভাবে স্ট্যাক করা 2 প্যানেল গ্রাফিক

আপনি যদি ফ্রিকোয়েন্সি মান যুক্ত করতে চান তবে একটি সারণী হ'ল সর্বোত্তম বিন্যাস।

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