【问题标题】:How to color point in R with the same scale如何以相同的比例在R中着色点
【发布时间】:2013-04-03 13:52:32
【问题描述】:

我有一个如下形式的数据框:

Data <- data.frame(X = sample(1:10), Y = sample(1:10)) 

我想给用得到的点上色

plot(Data$X,Data$Y)

使用来自另一个数据框的值:

      X1    X2    X3   X4    X5
1   0.57  0.40  0.64 0.07  0.57
2   0.40  0.45  0.49 0.21  0.39  
3   0.72  0.65  0.74 0.61  0.71
4   0.73  0.54  0.76 0.39  0.64
5   0.88  0.81  0.89 0.75  0.64
6   0.70  0.65  0.78 0.51  0.66
7   0.84  0.91  0.89 0.86  0.83
8  -0.07  0.39 -0.02 0.12 -0.01
9   0.82  0.83  0.84 0.81  0.79
10  0.82  0.55  0.84 0.51  0.59

所以要使用来自第二个数据帧的五列来为点着色,从而获得五个不同的图表。我设法通过查看此处 (Colour points in a plot differently depending on a vector of values) 来做到这一点,但我无法弄清楚如何为所有五个不同的图设置相同的色标。

第二个数据框中的列可能具有不同的最小值和最大值,因此如果我在第一列上使用 cut 函数生成颜色,这将生成与该列相关的因子和后来的颜色。

希望这很清楚,

谢谢。

【问题讨论】:

  • 将数据框折叠成一个向量,在那个上使用cut来构建你的色阶。

标签: r colors


【解决方案1】:

您需要您的色带包含所有值,因此您可能希望将它们放在同一个向量中。我可能会融化数据,然后制作颜色渐变,然后使用 ggplot 中的 facet 函数来获取多个图。或者,如果您不想使用 ggplot,您可以将数据转换回多列,并为您的颜色添加 5 个额外的列。

require(reshape2)
require(ggplot2)
Data.m <- melt(Data,id=Y)
rbPal <- colorRampPalette(c('red','blue'))
Data.m$Col <- rbPal(10)[as.numeric(cut(Data.m$value,breaks = 10))]
ggplot(Data.m, aes(value, Y,col=Col)) + 
  geom_point() +
  facet_grid(variable~.)

你的 Data 对象有两个变量,X 和 Y,但是你说要制作 5 个图,所以那部分有点不清楚,但我认为 melt 函数将有助于获得全面的色带,而 facet_grid 函数可能会使如果这是你想要的,一次做 5 个图表更容易。

【讨论】:

    猜你喜欢
    • 2022-10-19
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多