3

我有这个散点图:

iris$size <- 2
ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, color=Species, size=size))

它工作正常。现在我只想让其中一个点比其他点稍大,所以我这样做:

iris$size[3] <- 2.5
ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, color=Species, size=size))

这造成了不成比例的大小差异!该点iris$size[3]并不比其余点大 20%,而是更大(可能是 10 倍)。如果我只是在 2.0size=之外简单地设置为某个常数,例如 2.5,aes()那么与 2.0 相比,2.5 的大小看起来比预期的要大,但当它设置aes()为数据框中的列时则不然。

对于alpha=. 如果我将其设置alpha=为常数,则不能aes()正常工作,但如果我将一些点的 alpha 设置为 ,而将一些点的 alpha 设置0.60.65,则差异会被放大到非常大。

我怎样才能解决这个问题?如何aes()在调用时从列中获取要解释的 alpha/size 值,就像它们在列之外所做的那样geom_point()?谢谢。

4

1 回答 1

3

当您设置大小时,您的值将分布在预设范围之间 - 因为scale_size_continuous()默认范围是从 1 到 6。因此数据中的最小值得到size=1,最大值得到size=6。使用scale_size_continuous()和参数range=,您可以获得自己的范围,例如,与原始数据中的相同。

ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, 
                color=Species, size=size))+
  scale_size_continuous(range=c(2,2.5),breaks=c(2,2.5))

If the data used for size= are actual size values you want to see on plot you can use use scale_size_identity() which will interpret values specified for size= in aes() directly.

ggplot(iris) + geom_point(aes(x=Sepal.Width, y=Sepal.Length, color=Species, size=size))+
  scale_size_identity()
于 2013-03-29T16:42:54.437 回答