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

जैसा कि हैडली ने उल्लेख किया है कि स्टैक्ड बार चार्ट में लेबल की तुलना में आपके संदेश को संप्रेषित करने के अधिक प्रभावी तरीके हैं। वास्तव में, स्टैक्ड चार्ट बहुत प्रभावी नहीं होते हैं क्योंकि बार (प्रत्येक श्रेणी) एक अक्ष साझा नहीं करता है, इसलिए तुलना कठिन है।

इन उदाहरणों में दो अक्षों का उपयोग करना लगभग हमेशा बेहतर होता है, एक सामान्य अक्ष साझा करना। आपके उदाहरण में मैं मान रहा हूं कि आप कुल मिलाकर दिखाना चाहते हैं और फिर प्रत्येक श्रेणी में दिए गए वर्ष में अनुपात का योगदान दिया है।

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 पैनल ग्राफिक

यदि आप फ़्रीक्वेंसी मान जोड़ना चाहते हैं तो एक तालिका सबसे अच्छा प्रारूप है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.