ggplot bar使用两个变量并排绘制

Ele*_*ino 4 r

我想在R studio中使用两个变量并排使用ggplot来创建一个条形图.我试着跟随我在网上找到的其他人的建议,但我无法让它工作.

这是我正在使用的数据:

x <- c(5,17,31,9,17,10,30,28,16,29,14,34)

y <- c(1,2,3,4,5,6,7,8,9,10,11,12)

day <- c(1,2,3,4,5,6,7,8,9,10,11,12)
Run Code Online (Sandbox Code Playgroud)

所以,我想要做的是在x轴上有几天,并且x和y的并排条形图(x和y被着色)对应于日期编号.

我做的第一件事是建立一个数据框:

df1 <- data.frame(x,y,day)
Run Code Online (Sandbox Code Playgroud)

然后我试了一下:

ggplot(df1,aes(x = day,y = x,y))+ geom_bar(stat ="identity",color = x,width = 1,position ="dodge")

但我无法让它正常工作.有关我如何实现这一目标的任何建议?

Tay*_*orV 12

你有正确的想法,我认为包中的melt()功能reshape2是你正在寻找的.

library(ggplot2)
library(reshape2)

x <- c(5,17,31,9,17,10,30,28,16,29,14,34)
y <- c(1,2,3,4,5,6,7,8,9,10,11,12)
day <- c(1,2,3,4,5,6,7,8,9,10,11,12)


df1 <- data.frame(x, y, day)
df2 <- melt(df1, id.vars='day')
head(df2)

ggplot(df2, aes(x=day, y=value, fill=variable)) +
    geom_bar(stat='identity', position='dodge')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述


Edg*_*tos 5

或者您可以用来facet_wrap生成两个图:

  library("ggplot2")
  library("reshape")
  x <- c(5,17,31,9,17,10,30,28,16,29,14,34)
  y <- c(1,2,3,4,5,6,7,8,9,10,11,12)
  day <- c(1,2,3,4,5,6,7,8,9,10,11,12)
  df1 <- data.frame(x,y,day)
  df2 <- reshape::melt(df1, id = c("day"))
  ggplot(data = df2, aes(x = day, y = value, fill = variable)) + geom_bar(stat = "identity")+ facet_wrap(~ variable) + scale_x_continuous(breaks=seq(1,12,2))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 如果您想要根据使用日期显示颜色的条形fill = day

ggplot(data = df2, aes(x = day, y = value, fill = day)) + geom_bar(stat = "identity") + facet_wrap(~ variable) + scale_x_continuous(breaks=seq(1,12,2)) 
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述