2016-09-29 66 views
1

我试图建立一个使用情节的交互式图表,但它没有显示geom_line(),我不知道为什么。这不是我确切的例子,但即使在plotly的网页上提供的例子也失败了。那就是:ggplotly未能显示geom_line

library(plotly) 
datn <- read.table(header=TRUE, text=' 
supp dose length 
        OJ 0.5 13.23 
        OJ 1.0 22.70 
        OJ 2.0 26.06 
        VC 0.5 7.98 
        VC 1.0 16.77 
        VC 2.0 26.14 
        ') 

## This one works fine (original example): 
ggplot(data=datn, aes(x=dose, y=length, group=supp, colour=supp)) + geom_line() + geom_point() 
ggplotly() 

## This one doesn't (modified the group): 
ggplot(data=datn, aes(x=dose, y=length, group=dose, colour=supp)) + geom_line() + geom_point() 
ggplotly() 

看起来像这样的ggplot后:

enter image description here

ggplotly看起来是这样的:

enter image description here

是怎么回事?试过:The appliance of geom_line() in ggplot()ggplotly not displaying geom_line correctly无济于事。

更新:如果我忽略了颜色,线条正确打印:

ggplot(data=datn, aes(x=dose, y=length, group=dose)) +   
geom_line(aes(group=dose)) + geom_point() 
ggplotly() 

所以我总是可以只在geom_point()本身,而是为什么分配geom_point()属性?

回答

0

它正在做你正在编码它。例如,占据第一位,并在aes()功能取出group参数完全:

ggplot(data=datn, aes(x=dose, y=length, colour=supp)) + geom_line() 

你像以前一样得到完全相同的情节。

在第二个示例中,您正在使用supp着色,但是使用dose进行了分组。例如,当dose为0.5时,长度为13.23和7.98。图中有一条线连接点(0.5,7.98)和(0.5,13.23)。由于您正在按dose分组,因此将根据dose组中的0.5,1和2绘制线。

+0

对,这就是我想要的,但ggplotly()省略了这些行。这是我的问题。我正在上传图片。 –

0

它可能是一个功能,而不是一个错误:单行只能有一个颜色。当对剂量分组时,两个分组点具有不同的sup值,例如,点剂量0.5与补充值OJ和VC有关。所以绘图功能必须处理将两种颜色分配到一条线的情况。

ggplot通过使用它在数据表中找到的第一个颜色来解决此问题。如果您重新排序表,ggplot将使用其他颜色的线:

datn = datn[order(datn$supp, decreasing = T),] 

ggplot(data=datn, aes(x=dose, y=length, group=dose, colour=supp)) + geom_line() + geom_point() 

相比之下,ggplotly宁愿不绘制任何线,以解决歧义。如果没有歧义,绘图也可以通过ggplotly完成:

datn$supp2 = c("a", "b", "b", "a", "b", "b") 
ggplot(data=datn, aes(x=dose, y=length, group=dose, colour=supp2)) + geom_line() + geom_point() 
ggplotly()