2016-05-12 75 views
0

我有欲沿两个维度标绘数据:VK(离散)和relPrec(连续)传奇用于GGPLOT2两个离散秤

此外,我有沿两个维度属性:

type <- c("relPrecAir", "relPrecInv", "relPrectotal") 
p <- c(0.9, 0.95, 0.99) 

我想用颜色表示type,用颜色表示p。我设法使用以下代码:

precisionTable <- structure(list(relPrecTotal = c(0, 0, 0, 0.0070300473755567, 0.00842647198124317, 0.0112374693913644), relPrecAir = c(0, 0, 0, 0.00700370093237813, 0.00839489217055491, 0.011195354831821), relPrecInv = c(0, 0, 0, 0.0108917034179065, 0.0130551941937278, 0.0174102928813975), p = c(0.9, 0.95, 0.99, 0.9, 0.95, 0.99), VK = c(0, 0, 0, 1.15, 1.15, 1.15), case = c("demandStochastic", "demandStochastic", "demandStochastic", "demandStochastic", "demandStochastic", "demandStochastic")), .Names = c("relPrecTotal", "relPrecAir", "relPrecInv", "p", "VK", "case"), row.names = c(NA, -6L), class = "data.frame") 

ggplot(precisionTable, aes(VK, relPrecTotal, color=as.factor(p))) + geom_line() + geom_point(shape=19) + 
        geom_line(aes(VK,relPrecAir, color=as.factor(p))) + geom_point(aes(VK,relPrecAir), shape=17) + 
        geom_line(aes(VK,relPrecInv, color=as.factor(p))) + geom_point(aes(VK,relPrecInv), shape=15) + 
         scale_color_discrete(name="p") 

显示p的一个图例。但是我无法用形状值为type绘制第二个图例。我如何添加它?

My try, legend for shapes is missing

回答

1

我们可以通过添加新的分组的参数进行这项工作,relPrecAirrelPrecInv,然后继续使用ggplot绘制它。

编辑重写形状色彩的传奇

library(reshape2) 
precisionTable2 <- melt(precisionTable, measure.vars = c("relPrecTotal", "relPrecAir", "relPrecInv")) 
ggplot(precisionTable2, aes(VK, value)) + 
    geom_line(aes(color=as.factor(p), shape=as.factor(variable))) + 
    geom_point(aes(color=as.factor(p),shape=as.factor(variable))) + 
    scale_color_discrete(name='p') + 
    scale_shape_discrete(name='relPrec') + 
    guides(color=guide_legend(override.aes = list(shape=NA))) 

edit

+0

感谢,@ zyurnaidi,非常好!有没有办法从p下面的图例中删除点?严格地说,它们有点误导,因为只有颜色而不是形状是重要的。 – mondano

0

你可以melt您data.frame,以避免在您ggplot命令的多个步骤,并创建一个新的变量(这里ptShape),您将映射一个geom_point呼叫aes内:

library(reshape2) 
pmelt = melt(precisionTable, id.vars=c('VK', 'p', 'case')) 
pmelt$ptShape = rep(c(19,17,15), each=6) 

ggplot(pmelt, aes(x=VK, y=value)) + 
    geom_line(aes(colour=as.factor(p), shape=as.factor(ptShape))) + 
    geom_point(aes(colour=as.factor(p), shape=as.factor(ptShape)), size=5) 

enter image description here

+0

注意,我认为这是你想要的东西,但它似乎是一个奇怪的结果对我;-) – ztl