0

我尝试了一个有很多点(> 150)的散点图。目标是区分图形某些区域的点。我本质上正在寻找的是一种为 x 轴和 y 轴(每个轴 1 个)提供 2 个色标的方法。本质上,我正在寻找这样的东西:

在此处输入图像描述

每个独特的点应该是各自比例的颜色的混合。到目前为止,我尝试的是使用 ggplot 的散点图。我试过设置颜色属性,但它分配了自己的坐标。它也不适用于我的限制,因为我必须创建散点图的单独图(简而言之,放大左上角、右上角、左下角、右下角的图)。如果我将 xlim 和 ylim 设置为我自己喜欢的附加图,我得到的只是一个裁剪,这会导致其他点的一些切口及其在图边缘的文本。我不能简单地创建一个单独的图,因为我需要这些点在我的整体图和更具体的图(单色)上是相同的颜色。

png("image.png", width = 2000, height = 1500, res = 85);
ggplotXY <- ggplot(scatterPlotData, aes(x=x, y=y, colour=labels, label=labels)) +
geom_point() +
geom_text(hjust=0, vjust=0)
ggplotXY
dev.off()

目前的整体情节:

在此处输入图像描述

当前左下角放大图:

png("image.png", width = 2000, height = 1500, res = 85);
ggplotXY <- ggplot(scatterPlotData, aes(x=x, y=y, colour=labels, label=labels)) +
geom_point() +
geom_text(hjust=0, vjust=0) +
coord_cartesian(xlim=c(0,100), ylim=c(0, 2.5))
ggplotXY
dev.off()

在此处输入图像描述

正如你所看到的,有些点被剪掉了,没有被省略。为了省略不适用的点,我必须创建一个新的数据框,其中的实际点在限制范围内,但是这样做会在我创建新图时改变点的颜色。我正在考虑将我自己的颜色作为我正在读取的数据框的一部分,但是添加和减去十六进制颜色代码并不是很好。我尝试并得到了一些类似的东西:

png("image.png", width = 2000, height = 1500, res = 85);
ggplotXYColor <- ggplot(scatterPlotData, aes(x=x, y=y, label=labels)) +
geom_point(colour=scatterPlotData$scatterPointColour)
ggplotXYColor
dev.off()

在此处输入图像描述

如果您想知道,scatterPlotData$scatterPointColour 如下:

  [1] "#2276c6" "#224dd0" "#201893" "#22459f" "#21580f" "#219998" "#201893"
  [8] "#216871" "#22459f" "#201893" "#2276c6" "#22459f" "#22353d" "#201893"
 [15] "#225602" "#21cabe" "#2178d3" "#21eb83" "#21eb83" "#201893" "#201893"
 [22] "#22978b" "#2276c6" "#301054" "#201893" "#301054" "#225e33" "#228f59"
 [29] "#226664" "#220c47" "#21eb83" "#228f59" "#227ef7" "#227ef7" "#226e95"
 [36] "#21c28d" "#22459f" "#228f59" "#223d6e" "#221caa" "#22459f" "#226e95"
 [43] "#225602" "#221caa" "#21d2f0" "#222d0c" "#22459f" "#201893" "#2020c4"
 [50] "#210623" "#21a1c9" "#201893" "#228f59" "#201893" "#201893" "#221caa"
 [57] "#220c47" "#201893" "#22a7ed" "#101893" "#22c080" "#201893" "#2276c6"
 [64] "#201893" "#201893" "#21d2f0" "#222d0c" "#21c28d" "#225602" "#226664"
 [71] "#226e95" "#201893" "#201893" "#21b22b" "#2020c4" "#21cabe" "#21f3b4"
 [78] "#22d0e2" "#201893" "#21c28d" "#21fbe5" "#220c47" "#225602" "#230209"
 [85] "#226664" "#210e55" "#211eb7" "#2170a2" "#201893" "#221caa" "#220c47"
 [92] "#21f3b4" "#21fbe5" "#201893" "#201893" "#201893" "#224dd0" "#247add"
 [99] "#201893" "#23fffc" "#25db1d" "#24188f" "#245a18" "#2449b6" "#24a3d3"
[106] "#201893" "#2451e7" "#24624a" "#24830e" "#2020c4" "#201893" "#201893"
[113] "#25b228" "#25eb80" "#23ced5" "#244185" "#24ed8d" "#243123" "#2449b6"
[120] "#201893" "#273b5e" "#201893" "#264dcd" "#2420c1" "#2578d0" "#264dcd"
[127] "#251eb3" "#22c8b1" "#22c080" "#22f1a7" "#249370" "#251eb3" "#2428f2"
[134] "#2428f2" "#249ba1" "#201893" "#2020c4" "#201893" "#244185" "#2472ac"
[141] "#2449b6" "#247add" "#201893" "#244185" "#243123" "#249370" "#24b435"
[148] "#2020c4" "#248b3f" "#2020c4"

我将十六进制颜色转换为十进制,然后将特定的十进制颜色添加在一起,然后将其转换回十六进制。从理论上讲,x 轴上应该是漂亮的白色到黄色,y 轴上应该是白色到蓝色。随着 x 和 y 点的增加,颜色应该变得更绿。如您所见,事情并非如此简单。我还没有遇到任何使用 2 轴颜色的库。

总而言之,我需要能够使用 2 轴颜色来为点提供独特的颜色,并需要一种方法来创建额外的图,这些图将在更放大的画布上具有精确的某些颜色。

如果有人可以提供帮助,将不胜感激。

4

1 回答 1

1

在这里,您有第一种方法使用基本图形来解决您的第一个问题(混合两种颜色渐变)。

## use white->yellow for the x-axis and white->blue for the y-axis
chooseColors <- function(x, y) {
  x <- 1-x/max(x)
  y <- 1-y/max(y)
  return(rgb(green=y, red=y, blue=x))
}


## example values for the whole range
values <- expand.grid(1:100, 1:100)

## plot it
plot(values, col=chooseColors(values[,1], values[,2]), pch=16)

在此处输入图像描述

一个更真实的玩具示例:

set.seed(1)
n <- 50
values <- cbind(sample(1:15, size=n, replace=TRUE), sample(1:15, size=n, replace=TRUE))

## plot it
plot(values, col=chooseColors(values[,1], values[,2]), pch=16)

在此处输入图像描述

于 2013-08-07T19:00:54.110 回答