直方图/ ggplot,x和y,True为False

时间:2016-11-26 13:19:09

标签: r ggplot2 histogram

我正在尝试制作一个直方图,其中x轴为年龄,y轴为0或1(真或假)

person = c(1:50)
age = sample(1:5,50,replace=T) 
drunk = sample(0:1,50,replace=T)
df = data.frame(person,age,drunk)

#plots that I tried:
ggplot(df, aes(x = age, y = drunk)) +
  geom_bar(stat="identity")

hist(df$age)

barplot(df$drunk, names.arg=df$age)

这些情节对我不起作用。我想要的是:X轴应该看起来像50个数字,范围从1-5,Y轴应该是0或1(真或假)

df$drunk <- as.character(df$drunk)
df$drunk[df$drunk == "0"] <- "False"
df$drunk[df$drunk == "1"] <- "True"

我尝试使用上面的代码制作一个情节,但它没有用。

例如

http://i.imgur.com/c2DoEha.png。每个人在情节中都有一个随机年龄,并显示他是否被喝醉(0 - 1或真/假)

2 个答案:

答案 0 :(得分:2)

你需要:

  1. aes中的x更改为person
  2. factor(drunk)
  3. 中添加aes到您的y
  4. 添加scale_y_discrete以使用TRUE和FALSE而不是1和0标记y轴。
  5. 使用scale_x_discrete中的辅助函数添加person以将age刻度标签更改为相应的label,并将限制设置为person中的df变量。

    ggplot(df, aes(x = person, y = factor(drunk))) +
       geom_bar(stat="identity") +
       labs(x = "Age", y = "Drunk") +
       scale_y_discrete(labels = c("FALSE","TRUE")) +
       scale_x_discrete(limits = seq(min(df$person), max(df$person)), labels = function(x) df[df$person == x,]$age)
    
  6. enter image description here

答案 1 :(得分:0)

这对你有用吗<​​/ p>

ggplot(df,aes(x=person,y=age,fill=factor(drunk))) + geom_bar(stat='identity')