我有一个应用程序,旨在绘制'预先计算的'存储在MYSQL数据库中的数据框。
数据框由四列组成 - id,基因型,A值和B值。该图是一个简单的A / B geom_point,请参见下面的示例代码。
我想根据' Genotype'手动定义点的形状和颜色。变量。
基因型的值始终是; " -1"," 0" ," 1"和" 2"。然而,在一些数据帧中,并非所有这些值都存在(例如仅1),但是我想保持图之间的形状/颜色相同。
有人有解决方案吗?
library( ggplot2 )
# Example values
id <- c( "s1" , "s2" , "s3" , "s4" )
genotype <- c( -1 , 0 , 1 , 2 )
A_value <- c( 100 , 110 , 120 , 130 )
B_value <- c( 130, 120 , 110 , 100 )
# data_frame
df <- data.frame( id, genotype , A_value , B_value )
# Simple plot
ggplot(df, aes( A_value , B_value )) +
geom_point( aes(shape = factor( df$genotype ) , color = factor(df$genotype) ))
答案 0 :(得分:1)
您可以指定基因型水平,然后在海底形状和颜色标度中使用drop = FALSE
。请注意,您不应在df$genotype
- aes
的规范中使用geom_point
,因为您指的是相同的数据帧。
ggplot(df, aes(A_value, B_value)) +
geom_point(aes(shape = factor(genotype, levels = c(-1 , 0 , 1 , 2)),
color = factor(genotype, levels = c(-1 , 0 , 1 , 2)))) +
scale_color_discrete(name = "genotype", drop = F) +
scale_shape_discrete(name = "genotype", drop = F)
ggplot(df[1:3, ], aes(A_value, B_value)) +
geom_point(aes(shape = factor(genotype, levels = c(-1 , 0 , 1 , 2)),
color = factor(genotype, levels = c(-1 , 0 , 1 , 2)))) +
scale_color_discrete(name = "genotype", drop = F) +
scale_shape_discrete(name = "genotype", drop = F)