问题
I am just getting started with ggplot2()
(data visualization) in R
. The data I have has different workloads in row format. Each of these column has four different parameters that I want to plot as stacked bar plot, preferably using ggplot2()
.
Reproducible Data
Workload P1 P2 P3 P4
W1 0.3 0.2 0.4 0.1
W2 0.5 0.1 0.3 0.1
W3 0.2 0.3 0.4 0.1
W4 0.3 0.2 0.5 0.1
I want to plot Workload
as x-axis
and then P1
, P2
, P3
and P4
will be stacked for each of the workload on y-axis
.
I tried many things, but I am getting tangled with ggplot2()
parameters and arguments. If anyone can suggest how I can do this, it will be helpful.
Thanks.
回答1:
Change to the "superior" long format (here I use tidyr::gather
), then map your columns to aesthetics, with a column geom with stacked position (bar is a special case which counts number of observations).
library(tidyverse)
df <- read.table(text = "
Workload P1 P2 P3 P4
W1 0.3 0.2 0.4 0.1
W2 0.5 0.1 0.3 0.1
W3 0.2 0.3 0.4 0.1
W4 0.3 0.2 0.5 0.1", header = TRUE)
df_long <- df %>%
gather(P, value, P1:P4)
ggplot(df_long, aes(x = Workload, y = value, fill = P)) +
geom_col(position = position_stack())
来源:https://stackoverflow.com/questions/50380229/rows-as-stacked-bar-plot-using-ggplot2-in-r