【问题标题】:Colouring a histogram beyond a certain value为超过某个值的直方图着色
【发布时间】:2017-05-22 21:41:09
【问题描述】:

首先我知道这个问题之前出现过,即:Change histogram bar colours greater than a certain value 但是尽管有那个线程,我还是遇到了一个令人困惑的问题。

所以,我有一些数据,在该数据中,我知道变量 house$PPSQM 有 4 个值大于 3000。所以我试图做的是绘制数据的直方图,其中所有低于 3000 的条形为红色,3000 以上的为灰色。我通过查看直方图知道有 2 个高于 3000 的条(为了清楚起见,4000 有 2 个值,5000 有 2 个)这是我使用的代码:

clr <- ifelse(houses$PPSQM>3000, "grey", "red")

hist(houses$PPSQM,ylim = c(0, 50) ,xlab="Cost per Sq. Meter",ylab='Frequency',col = clr)

但我遇到的问题是:如果我在 if-else 语句中说houses$PPSQM>3000,那么它会将所有条形都涂成红色......如果我说houses$PPSQM

关于如何解决这个问题有什么建议吗?

【问题讨论】:

  • 嗨,Alanis,如果您可以使示例可重现,那么对您的帮助会容易得多。
  • 如果没有看到您的数据就很难回答,但我怀疑问题是clr 中的颜色比直方图中的条形要多。请记住,直方图不是条形图:这些值被放入箱中,而不是单独计算。试试h &lt;- hist(houses$PPSQM) 然后看看length(clr) 是否大于length(h$counts)
  • 你是对的,lenght(clr) 等于 12535...而length(h$counts) 等于 11。这是其中的一个日子...现在修好了...谢谢您的帮助

标签: r


【解决方案1】:

我认为您需要通过直方图中的中断而不是数据中的值来着色。试试这个:

h   <- hist(houses$PPSQM)
clr <- ifelse(h$breaks > 3000, "red", "grey")
hist(houses$PPSQM, ylim = c(0, 50), xlab = "Cost per Sq.Meter", 
     ylab = 'Frequency', col = clr)

您可能需要使用breaks 参数(请参阅?hist)来让它看起来像您想要的那样。您可能还想使用&gt;= 3000

【讨论】:

  • 谢谢,您上面的评论让我走上了修复它的正确轨道……这是通过使用breaks 参数。感谢您的帮助
猜你喜欢
  • 2021-11-28
  • 2011-10-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多