2015-04-06 31 views
2

我一直試圖生成散點圖,其中兩個級別的alpha應用於高於或低於分數閾值的點。要做到這一點,我存儲每個點的阿爾法值向量,item_alpha,數據幀中,並在我的電話提供這種載體作爲阿爾法的參數geom_point:Alpha未應用於ggplot scatterplot中的所有點

library(ggplot2); 
library(scales); 
one.data <- read.table("test.data", header = TRUE) 

p1 <- ggplot(data = one.data) 
p1 <- p1 + geom_point(aes(plot_X, plot_Y, colour = log10_p_value, size = plot_size, alpha = item_alpha)) 
p1 <- p1 + scale_colour_gradientn(colours = c("red", "yellow", "green", "blue"), limits = c(min(one.data$log10_p_value), max(one.data$log10_p_value))); 
p1 <- p1 + geom_point(aes(plot_X, plot_Y, size = plot_size), shape = 21, fill = "transparent", colour = I (alpha ("black", 0.6))); 
p1 <- p1 + scale_size(range=c(5, 30)) + theme_bw(); 
one.x_range = max(one.data$plot_X) - min(one.data$plot_X); 
one.y_range = max(one.data$plot_Y) - min(one.data$plot_Y); 
p1 <- p1 + xlim(min(one.data$plot_X) one.x_range/10,max(one.data$plot_X)+one.x_range/10); 
p1 <- p1 + ylim(min(one.data$plot_Y)one.y_range/10,max(one.data$plot_Y)+one.y_range/10); 
p1 

然而,似乎阿爾法只適用於8個值較小的點,而其餘點則不透明。我已經諮詢了ggplot文檔,使用了示例並嘗試了其他一些主要產生各種錯誤的變體,我真的希望有人對此有所瞭解!提前致謝!

內容test.data的:

"plot_X" "plot_Y" "plot_size" "log10_p_value" "item_alpha" 
5.326 3.194 4.411 -27.3093 0.6 
-2.148 7.469 3.434 -12.3487 0.6 
-6.14 -2.796 3.062 -22.8069 0.6 
3.648 6.091 3.597 -15.5032 0.6 
0.356 -6.925 3.95 -10.4754 0.6 
5.532 -0.135 3.246 -19.2883 0.6 
3.794 -2.279 3.557 -16.4438 0.6 
-3.784 1.42 2.914 -17.9687 0.6 
-7.645 -1.571 3.163 -12.4498 0.6 
-1.526 -4.756 3.509 -10.8972 0.6 
-6.461 2.293 2.962 -13.4306 0.6 
-5.806 0.983 4.38 -24.5422 0.6 
-3.592 0.769 2.971 -17.8119 0.6 
0.127 3.572 3.603 -11.4277 0.6 
-0.566 0.706 3.77 -13.0952 0.3 
2.25 -2.604 0.845 -11.7949 0.3 
-7.845 -0.927 3.21 -12.6408 0.3 
1.084 -6.691 3.654 -10.7319 0.3 
-3.546 6.46 2.994 -11.6777 0.3 
-5.478 -0.645 4.256 -17.7344 0.3 
-6.251 -0.418 4.273 -19.29 0.3 
-3.855 5.969 3.236 -10.9057 0.3 
0.345 0.971 3.383 -11.5973 0.6 
0.989 0.345 2.959 -10.8252 0.6 

回答

1

您使用的是與GGPLOT2一個明顯的基礎繪製的做法,這顯然是不正確的方式去。這裏有兩種選擇:

dat <- read.table(text = "plot_X plot_Y plot_size log10_p_value item_alpha 
5.326 3.194 4.411 -27.3093 0.6 
-2.148 7.469 3.434 -12.3487 0.6 
-6.14 -2.796 3.062 -22.8069 0.6 
3.648 6.091 3.597 -15.5032 0.6 
0.356 -6.925 3.95 -10.4754 0.6 
5.532 -0.135 3.246 -19.2883 0.6 
3.794 -2.279 3.557 -16.4438 0.6 
-3.784 1.42 2.914 -17.9687 0.6 
-7.645 -1.571 3.163 -12.4498 0.6 
-1.526 -4.756 3.509 -10.8972 0.6 
-6.461 2.293 2.962 -13.4306 0.6 
-5.806 0.983 4.38 -24.5422 0.6 
-3.592 0.769 2.971 -17.8119 0.6 
0.127 3.572 3.603 -11.4277 0.6 
-0.566 0.706 3.77 -13.0952 0.3 
2.25 -2.604 0.845 -11.7949 0.3 
-7.845 -0.927 3.21 -12.6408 0.3 
1.084 -6.691 3.654 -10.7319 0.3 
-3.546 6.46 2.994 -11.6777 0.3 
-5.478 -0.645 4.256 -17.7344 0.3 
-6.251 -0.418 4.273 -19.29 0.3 
-3.855 5.969 3.236 -10.9057 0.3 
0.345 0.971 3.383 -11.5973 0.6 
0.989 0.345 2.959 -10.8252 0.6",header = TRUE) 

dat$alpha_grp <- ifelse(dat$item_alpha == 0.6,'High','Low') 

#If you want a legend; although you can suppress the legend 
# here if you want. 
ggplot(data = dat,aes(x = plot_X,y = plot_Y)) + 
    geom_point(aes(alpha = alpha_grp)) + 
    scale_alpha_manual(values = c(0.3,0.6)) 

#If you don't care about a legend 
ggplot() + 
    geom_point(data = dat[dat$alpha_grp == 'High',], 
         aes(x = plot_X,y = plot_Y),alpha = 0.6) + 
    geom_point(data = dat[dat$alpha_grp == 'Low',], 
         aes(x = plot_X,y = plot_Y),alpha = 0.3) 
+0

謝謝!這工作很好! – user3396385