【发布时间】:2011-04-16 02:19:26
【问题描述】:
我想使用 R 基础图形制作散点图,但如果需要,我可以使用 ggplot。我有一个包含 x 和 y 坐标的数据框,还有另外两个协变量,称为 a 和 b。我希望每个点的大小随 a 变化(a 的高值 -> 较大的点),每个点的亮度/坚固度随 b 变化(这样那些 b 足够低的点实际上是不可见的)。有人对如何做到这一点有任何建议吗? R 图形的文档似乎很全面,但如此笼统和高级,我几乎不知道从哪里开始。 感谢您的帮助
【问题讨论】:
我想使用 R 基础图形制作散点图,但如果需要,我可以使用 ggplot。我有一个包含 x 和 y 坐标的数据框,还有另外两个协变量,称为 a 和 b。我希望每个点的大小随 a 变化(a 的高值 -> 较大的点),每个点的亮度/坚固度随 b 变化(这样那些 b 足够低的点实际上是不可见的)。有人对如何做到这一点有任何建议吗? R 图形的文档似乎很全面,但如此笼统和高级,我几乎不知道从哪里开始。 感谢您的帮助
【问题讨论】:
下面的示例行显示了如何在绘图中同时使用大小和 alpha
plot(1:6, sample(6), cex = sample(6)/2, col = rgb(0,0,0, sample(6)/6), pch = 19)
【讨论】:
cex 参数是一种快速而肮脏的改变绘图字符大小的方法,但如果你想要一个信息量级等,你确实需要做很多工作。symbols() 是一种方法使用基本图形更准确。
使用一些虚拟数据,这里有一个使用cex 的绘图和一个使用symbols() 的绘图:
## dummy data first
set.seed(123)
dat <- data.frame(X = rnorm(10), Y = rnorm(10,2,2), a = runif(10), b = runif(10))
## plot using cex
plot(Y ~ X, data = dat, cex = 10 * a)
## plot using symbols()
with(dat, symbols(X, Y, circles = a))
您可以使用cex 示例中的col 参数或在符号情况下使用fg 参数为点着色。诀窍将是获得适当的规模。在我们的虚拟数据中,b 在区间 (0,1] 上,因此我们的比例可能是将其分为 5 个类别并使用五种绘图颜色之一。
## Eg using heat.colors(5)
cut.pts <- seq(0, 1, by = 0.1)
cuts <- with(dat, cut(b, cut.pts))
with(dat, symbols(X, Y, circles = a, bg = heat.colors(5)[cuts]))
如您所见,选择合适的颜色很重要,尽管在这里,一种颜色与背景相同。
使用 ggplot2 执行此操作可能会简单得多,因为 Hadley Wickham 已经为您完成了所有繁重的工作。
## Eg using ggplot
require(ggplot2)
p <- ggplot(dat, aes(X, Y, colour = b, size = a))
p + geom_point()
HTH
【讨论】:
这经常出现在 R 帮助中,例如 here。基本上,cex 将是更改点大小的有趣参数。为了改变点的颜色,我建议设置col=heat.colors() 或制作自己的颜色列表并在绘图前定义为一个因素。
【讨论】: