I guess this question is rather simple but I have a dataframe with 3 columns (A, B and C). A is the name, B has a numeric value, and C is also has a numeric value. The values of each B and C relate to the correspondent line in A
I need to plot a bar graph that allows to observe for each A, the B bar and the C bar next to each other.
Thanks a lot!
            Asked
            
        
        
            Active
            
        
            Viewed 163 times
        
    0
            
            
         
    
    
        PCRL
        
- 111
- 5
- 
                    5Please include the dataframe in the question; use `dput(your_dataframe)`. – Peter Feb 06 '22 at 20:24
- 
                    2The answer is almost always a pivot. Hadley [citation needed] suggests that long data is the better format which is why `ggplot2` works best on such data. – NelsonGon Feb 06 '22 at 20:26
- 
                    1Does this answer your question? [Plotting two variables as lines using ggplot2 on the same graph](https://stackoverflow.com/questions/3777174/plotting-two-variables-as-lines-using-ggplot2-on-the-same-graph) – Dan Adams Feb 06 '22 at 21:22
2 Answers
2
            
            
        Here is an example with ggplot2 that you could work on:
# creating the dataframe
A <- c("First", "Second", "Third", "Fourth")
B <- c(44, 54, 32, 45)
C <- c(23, 12, 45, 34)
df <- data.frame(A, B, C)
# creating the plot with ggplot2
library(tidyverse)
df %>% 
  mutate(A = as_factor(A)) %>% 
  pivot_longer(
    cols=-A,
    names_to = "Numeric value",
    values_to = "value"
  ) %>% 
  ggplot(aes(x=A, y=value, fill=`Numeric value`))+
  geom_col(position = position_dodge())
 
    
    
        TarJae
        
- 72,363
- 6
- 19
- 66
1
            You may do this with a one-liner using low level graphics.
barplot(t(df[-1]), beside=TRUE, names.arg=df$A, col=2:3, legend.text=names(df)[-1])
Data (borrowed from TarJae):
df <- structure(list(A = c("First", "Second", "Third", "Fourth"), B = c(44, 
54, 32, 45), C = c(23, 12, 45, 34)), class = "data.frame", row.names = c(NA, 
-4L))
 
    
    
        jay.sf
        
- 60,139
- 8
- 53
- 110

