R plotly散点图中,标记大小似乎取决于颜色,当颜色是离散的时候。

6

更新:已在此处作为错误报告开放:https://github.com/ropensci/plotly/issues/1133

我正在使用plot_ly创建散点图,其中颜色由因子变量指示,大小由数字指示。在这种情况下,似乎颜色会奇怪地影响大小。

为了说明这一点,在这里我将相同的变量分配给xsize。在这种情况下,人们会期望最大的点在最右边。此演示代码包括一些额外的hoverinfo用于调试。

library(plotly)

my_data <- mtcars
my_data$carb <- as.factor(mtcars$carb)

plot_ly(my_data,
        x = ~wt,
        y = ~mpg,
        size = ~wt,
        color = ~carb,
        type = 'scatter',
        mode = 'markers',
        hoverinfo = 'text',
        text = ~paste0('wt (x): ', wt, '\n',
                       'mpg (y): ', mpg, '\n',
                       'wt (size): ', wt, '\n',
                       'carb (color): ', carb, '\n'))

与其在右侧放置最大的点,似乎更应该在每个颜色组内按比例缩放大小,这根本不是我想要的:

enter image description here

我尝试了从factor到character的更改,但结果仍然相同。如果我更改为numeric(使用因子级别映射到颜色),则图例变得连续,这样就不好了。 有任何想法吗?

1个回答

1

我不知道这个问题的答案,但经过几次测试后,我感觉这与颜色变量中的数字级别有关。

library(plotly)

my_data <- mtcars
my_data$carb <- factor(mtcars$carb)
my_data$cyl <- factor(mtcars$cyl) # cyl contains 3 levels and works fine
plot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~cyl, size = ~wt)


# 2 levels works fine
my_data$carb <- factor(mtcars$carb)
levels(my_data$carb) <- rep(1:2,each=3)
plot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)

# 3 levels works fine
my_data$carb <- factor(mtcars$carb)
levels(my_data$carb) <- rep(1:3,each=2)
plot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)

# 4 levels break down
my_data$carb <- factor(mtcars$carb)
levels(my_data$carb) <- c(1,1,2,2,3,4)
plot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)

可能是一个bug?

更新 根据@StéphaneLaurent的建议,这与数据中仅出现一次的因子水平有关,在这种情况下,carb中的68。如果将它们合并为一个级别,似乎可以解决问题。

my_data$carb <- factor(mtcars$carb)
levels(my_data$carb) <- c(1,2,3,4,5,5)
plot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)

2
我认为bug出现在只有一个观察组的情况下(例如,carb=6和carb=8)。对应于这些组的气泡太大了,而其他的是正确的。 - Stéphane Laurent
@StéphaneLaurent 感谢您指出!这正是在这里发生的事情。 - platypus
通过一些实验,我已经确定当一个组中有许多相同大小的点时,它可能会发生。我越来越确信这是一个错误,并正在撰写报告以开放问题。 - Brian Stamper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接