2011-03-13 96 views
56

传说阿尔法我有风速对方向的图具有点的巨大numeber,因此使用的α=我除了颜色我(1/20)=月如何设置GGPLOT2

这里是的代码的示例:

library(RMySQL) 
library(ggplot2) 
con <- dbConnect(...) 
wind <- dbGetQuery(con, "SELECT speed_w/speed_e AS ratio, dir_58 as dir, MONTHNAME(timestamp) AS month, ROUND((speed_w+speed_e)/2) AS speed FROM tablename;"); 

png("ratio-by-speed.png",height=400,width=1200) 
qplot(wind$dir,wind$ratio,ylim=c(0.5,1.5),xlim=c(0,360),color=wind$month,alpha=I(1/30),main="West/East against direction") 
dev.off() 

这产生一个体面图表,但是我的问题是,图例的α为1/30日也,这使得它不可读。有没有一种方法可以强制图例变成1 alpha?

下面是一个例子: Example Graph

+0

华丽的情节,BTW。 – 2015-07-28 21:10:09

回答

73

更新随着0.9.0版本的发布,一个现在可以在guides功能使用override.aes传说改写的审美价值。所以,如果你添加这样的东西到你的情节:

+ guides(colour = guide_legend(override.aes = list(alpha = 1))) 

应该这样做。


我已经通过使用数据的空子集做给GEOM重复呼叫,并使用来自呼叫传说解决此得到。不幸的是,如果数据帧实际上是空的(如从subset(diamonds,FALSE)得到),它不起作用,因为ggplot2似乎将这种情况视为与将NULL视为代替数据帧的情况相同。但是,我们可以通过仅使用一行的子集并将其设置为NaN在一个绘图维上获得相同的效果,这将防止它被绘制。

基于关闭大通的例子:

# Alpha parameter washes out legend: 
gp <- ggplot() + geom_point(data=diamonds, aes(depth, price, colour=clarity), alpha=0.1) 
print(gp) 

# Full color legend: 
dummyData <- diamonds[1, ] 
dummyData$price <- NaN 
#dummyData <- subset(diamonds, FALSE) # this would be nicer but it doesn't work! 
gp <- ggplot() + 
    geom_point(data=diamonds, aes(depth, price, colour=clarity), alpha=0.1, legend=FALSE) + 
    geom_point(data=dummyData, aes(depth, price, colour=clarity), alpha=1.0, na.rm=TRUE) 
print(gp) 
+0

辉煌。这个解决方案很棒。只是试着去尝试一下。为@ joran的更新工作 – Chris 2011-03-30 22:17:52

+2

+1(以及现在不需要的很好的黑客) – Gregor 2012-04-30 17:48:37

+0

我使用的是0.9.3.1版本,但它对我无效。我已经把'guides()'函数放在了不同的位置,但是我没有得到预期的行为。任何提示? – polarise 2014-02-13 15:43:46

5

的谷歌搜索止跌回升this post这似乎并不表明ggplot有点目前支持此选项。其他人通过使用gridExtra并使用here讨论的视口来解决相关问题。

我不是那么复杂,但是这里有一种方法可以给你想要的结果。方法是绘制几何图形,一次没有alpha参数,并且在真实绘图区域之外。第二个几何将包含alpha参数并抑制图例。然后我们将用xlim和ylim指定绘图区域。考虑到你有很多的观点,这将大约是时间的两倍,但是应该给你后面的效果。

使用钻石数据集:

#Alpha parameter washes out legend 
ggplot(data = diamonds, aes(depth, price, colour = clarity)) + 
geom_point(alpha = 1/10) 

#Fully colored legend 
ggplot() + 
geom_point(data = diamonds, aes(depth, price, colour =clarity), alpha = 1/10, legend = FALSE) + 
geom_point(data = diamonds, aes(x = depth - 999999, y = price - 999999, colour = clarity)) + 
xlim(40, 80) + ylim(0, 20000)