基于数据变量绘制具有颜色和形状的点

Posted

技术标签:

【中文标题】基于数据变量绘制具有颜色和形状的点【英文标题】:Plotting points with color and shape based on data variables 【发布时间】:2013-12-23 05:27:15 【问题描述】:

我正在尝试制作散点图,每个点的颜色对应一个变量,每个点的形状对应另一个变量。 这是一些示例数据和我用来制作第二个图的代码:

Example data:(of 3 points)
 X    Y    att1    att2

.5    .5    1       A
.24   .8    3       B
.6    .7    5       C

code:(for image2)
> plot(X,Y, col=statc[att2], pch = 15)
> legend("right", statv, fill=statc)

Where:
> statv
[1] "A"  "B" "C"  
> statc
[1] "red"    "blue"   "orange"

我已经单独完成了这项工作,但不知道如何同时进行。这是两个图:

1

2

例如:我希望将颜色应用于具有相同 att1 的点,并将形状应用于具有相同 att2 的点

【问题讨论】:

【参考方案1】:

与其他 R 系统绘图相比,ggplot2 擅长的领域之一是将绘图参数映射到数据变量。(通过美学机制)

library(ggplot2)
dat <- data.frame(X =runif(20),
                     Y =runif(20),
                     att1 = gl(5,20/5),
                     att2 =gl(3,20/3))
ggplot(dat,aes(x=X,y=Y,color=att1,shape=att2)) +
    geom_point(size=5) 

您也可以在基础图中执行此操作,但您应该手动生成图例...

plot(dat$X,dat$Y,pch=as.integer(dat$att1),col=as.integer(dat$att1))

【讨论】:

尝试将连续变量映射到形状时出现错误。但是,该变量仅采用少量不同的值。是否仍然可以使用 ggplot 将变量映射到形状/颜色? This 回答我自己的问题:我必须添加 + scale_shape_identity() 下一个问题:如果att1 的值大于25,你会怎么做?它们不能映射到pch-值,即形状。 点的大小将处理一个连续变量。也许尝试使用该属性的点大小而不是颜色。不过,您可能希望将大小标准化到某个合理的范围内。或者,您可以将连续值分成 25 个分档,可能基于分位数,并使用形状来表示新的分档属性。【参考方案2】:

这是你想要的吗? [df 是您的数据格式如上。]

library(ggplot2)
ggplot(df) + geom_point(aes(x=X,y=Y,color=factor(att1),shape=att2),size=5)

用你的数据产生这个:

【讨论】:

是的。谢谢您的帮助! ggplot 似乎是要走的路。

以上是关于基于数据变量绘制具有颜色和形状的点的主要内容,如果未能解决你的问题,请参考以下文章

Android:生成具有指定颜色底部的背景形状

Plotly:如何在 Plotly 中绘制具有渐变颜色的矩形?

OpenGL:在背景图像上使用蒙版绘制颜色

带有形状、填充和颜色的 geom_point

如何在 Visual C++ 中使用具有颜色和形状的工具栏创建绘图应用程序

用额外的颜色为形状上色