मैं इस ग्राफ़ R में लेकिन मैं संक्रमण डेटा को लाल स्टैक्ड बार में प्रदर्शित करने का प्रबंधन नहीं कर सकता। मैं यह भी नहीं जानता कि लिंक के ग्राफ़ के रूप में किसी अन्य रंग में मूल्य में घटने वाले बार को कैसे दिखाया जाए।

यहां से काम करने के लिए एक नमूना कोड है:

df <- data.frame(group=c("A","B","C"), values=c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19), 
                frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))

ggplot(df, aes(x=group, y=values, fill=group)) +
  coord_flip() +
  geom_bar(stat = 'identity') +
  geom_text(aes(label = values), vjust = -0.3, size = 3.5) +
  transition_manual(frame) +
  theme(legend.position = "none")
1
Diego Morales Bader 29 जून 2020, 06:50

2 जवाब

सबसे बढ़िया उत्तर

इस तरह के एनिमेशन को पाने के लिए कई तरीके हैं। वांछित परिणाम प्राप्त करने के लिए किसी प्रकार के स्टैक्ड बार चार्ट I दो geom_col परतों का उपयोग करने के बजाय।

पहला geom_col समय के साथ values को प्लॉट करता है, जिससे भरण इस पर आधारित होता है कि आधार मान की तुलना में मान बढ़ते हैं या घटते हैं। दूसरा geom_col समय के साथ values को प्लॉट करता है, जिससे भरण इस पर आधारित होता है कि आधार मान की तुलना में मान बढ़ते हैं या घटते हैं।

Seocnd geom_col बस आधार को प्लॉट करता है values जिससे उस स्थिति में मैं alpha aes का उपयोग इस आधार पर पारदर्शिता प्राप्त करने के लिए करता हूं कि क्या आधार मूल्य की तुलना में मूल्य बढ़ते या घटते हैं।

library(ggplot2)
library(gganimate)
library(dplyr)

df <- data.frame(group=c("A","B","C"), values=c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19), 
                 frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))

df1 <- df %>%
  group_by(group) %>% 
  mutate(base = values[frame == "a"],
         diff = values - base) %>% 
  ungroup()

ggplot(df1, aes(x=group)) +
  coord_flip() +
  geom_col(aes(y=values, fill = diff > 0), position = "identity") +
  geom_col(aes(y=base, alpha = diff > 0), fill = "blue", position = "identity") +
  scale_fill_manual(values = c("blue", "red")) +
  scale_alpha_manual(values = c("TRUE" = 1, "FALSE" = .2)) +
  geom_text(aes(y=values, label = values), vjust = -0.3, size = 3.5) +
  transition_manual(frame) +
  theme(legend.position = "none")
#> nframes and fps adjusted to match transition

2
stefan 29 जून 2020, 10:22

मुझे ऐसा लगता है कि स्टैक्ड बार चार्ट रखने के लिए आप अपने डेटा (df) में जानकारी खो रहे हैं। मैंने एक कॉलम frac बनाया है जिसमें आपके values कॉलम के लिए गुणक है। इस सरल उदाहरण में हम प्रत्येक समूह के लिए एक बार के साथ एक स्टैक्ड बार चार्ट तैयार करेंगे जहां मान और मान * फ़्रेक स्टैक्ड हैं। क्या आप इसी के पीछे हैं?

library(ggplot2)
library(gganimate)
library(dplyr)
library(tidyr)

df <- data.frame(group=c("A","B","C"), 
                 values= c(31,2,4,25,6,7,20,9,10,15,12,13,10,15,16,5,18,19), 
                 frac = c(1, 1, 1, 1.1, 0.9, 0.8, 1.2, 0.8, 0.7, 1.2, 0.7, 0.6, 1.3, 0.6, 0.5, 1.4, 0.5, 0.4),
                 frame=c(rep('a',3), rep('b',3), rep('c',3), rep('d',3), rep('e',3), rep('f',3)))


df <- df %>%
  mutate(values2 = values * frac) %>%
  pivot_longer(cols = contains("values"),
               names_to = "values", 
               values_to = "data")
  

ggplot(df, aes(x = group, y = data)) +
  coord_flip() +
  geom_col(aes(fill = values)) +
  geom_text(aes(label = values), vjust = -0.3, size = 3.5) +
  transition_manual(frame) +
  theme(legend.position = "none")

enter image description here

1
Paul van Oppen 29 जून 2020, 10:04