ggplotly无法显示geom_line

时间:2016-09-29 16:34:23

标签: r ggplot2 plotly

我尝试使用情节来构建交互式图表,但它未能显示geom_line()而且我不确定原因。这不是我的确切示例,但即使是在plotly的网页上提供的示例也会失败。这是:

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()属性,但为什么呢?

2 个答案:

答案 0 :(得分:0)

它正在完成您编码的工作。例如,取第一个并在group函数中完全取出aes()参数:

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分组,因此系列将根据{1}}组绘制,分别为0.5,1和2。

答案 1 :(得分: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()