2016-11-26 67 views
0

我试图与x轴的年龄和Y轴为0或1(true或false)直方图/ ggplot x和y与真实的假

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(TRUE或FALSE)

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或真/假)

+0

这部分我不明白: “X轴应该看起来像50号,从1-5”。你可以手工绘制图片并上传吗? –

+0

@KotaMori我添加了一个图像和描述 – Aanna

回答

2

您需要:

  1. 改变你aesperson
  2. 的X,aes
  3. 添加factor(drunk)你Y添加scale_y_discrete标记真假代替1和0
  4. y轴添加scale_x_discretelabel使用辅助功能,并且设置为person变量的范围的限制来改变person蜱标签到对应agedf

    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) 
    

enter image description here

+0

嗨,谢谢!人们应该如何处理数百行的人物/年龄? – Aanna

+0

这应该适用于'df'中的任意行数,只要它们是唯一的。 –

0

这是否对你的工作

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

它确实有效,但这不是我要找的。年龄应该是x轴,醉(0或1)应该是y轴。我尝试编辑代码到ggplot(df,aes(x = age,y = drunk,fill = drunk))+ geom_bar(stat ='identity'),但这不起作用 – Aanna

相关问题