在R中使用不同颜色的直方图式图表

5

我正在尝试以柱状图的形式绘制一个向量data。这通常很容易,因为plot(data, type="h")可以完美实现我的要求。然而,问题在于颜色。我的向量data长这样:

 data = c(1,2,2,3,1,1,2,3,1,2,2,3, ... )

我希望看到每个1以一种颜色绘制,每个2以另一种颜色绘制,每个3同样如此。我试图通过使用来实现这一点。
 plot(data, type="h", col=c("red","blue","green")

但是当R循环使用颜色向量时失败了,导致第一个条变成了红色,第二个变成了蓝色,第三个变成了绿色,第四个再次变成了红色,以此类推。
我对通用解决方案非常感兴趣,因为我的"data"向量并不总是由数字"1"、"2"和"3"组成。有许多情况下向量包含从1到6的数字。
有人知道如何解决这个问题吗?
3个回答

11
您需要创建一个长度相同的颜色向量,就像这样:

您需要创建一个长度相同的颜色向量,就像这样:

data = c(1,2,2,3,1,1,2,3,1,2,2,3)
colors = c("red","blue","green")
plot(data, type="h", col=colors[data])

这能够工作是因为 colors[data] 的形式如下:

print(colors[data])
#  [1] "red"   "blue"  "blue"  "green" "red"   "red"   "blue"  "green" "red"  
# [10] "blue"  "blue"  "green"

我该如何将此应用于一系列数据?例如,我想将落在-100到100之间的任何内容设为红色,其余内容设为蓝色。 - user1007742
使用cut函数进行切割:例如 mydatacut = cut(x, c(-Inf, -100, 100, Inf))。这将创建一个三级因子,然后您可以执行colors[as.numeric(mydatacut)],其中因子是在您的示例中为c("blue", "red", "blue") - David Robinson

6

尝试使用以下通用方法:

data = c(1,2,2,3,1,1,2,3,1,2,2,3,4,5,6,7,12,3)
colors = rainbow(length(unique(data)))
plot(data, type="h", col=colors[data])

0
 colors = rainbow(length(unique(data)));
 hist(data, col=colors[data]) 

使用拉帕尔姆先生的数据(如上所示)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接