当颜色是离散的时,R曲线散点图标记尺寸似乎取决于颜色

Bri*_*per 6 r plotly

更新:在此处作为错误报告打开: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'))
Run Code Online (Sandbox Code Playgroud)

而不是右边的最大点,看起来好像是在每个颜色组内缩放尺寸,这根本不是我真正想要的:

在此输入图像描述

我尝试从因素更改为字符,同样的事情发生,如果我更改为数字(使用因子级别映射到颜色),则图例变为连续,这是不好的.有任何想法吗?

pla*_*pus 1

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

\n\n
library(plotly)\n\nmy_data <- mtcars\nmy_data$carb <- factor(mtcars$carb)\nmy_data$cyl <- factor(mtcars$cyl) # cyl contains 3 levels and works fine\nplot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~cyl, size = ~wt)\n\n\n# 2 levels works fine\nmy_data$carb <- factor(mtcars$carb)\nlevels(my_data$carb) <- rep(1:2,each=3)\nplot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)\n\n# 3 levels works fine\nmy_data$carb <- factor(mtcars$carb)\nlevels(my_data$carb) <- rep(1:3,each=2)\nplot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)\n\n# 4 levels break down\nmy_data$carb <- factor(mtcars$carb)\nlevels(my_data$carb) <- c(1,1,2,2,3,4)\nplot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)\n
Run Code Online (Sandbox Code Playgroud)\n\n

也许是一个错误?

\n\n

更新\n由 @St\xc3\xa9phaneLaurent 建议,这与数据中单次出现的因子水平有关,在本例中,6以及8carb. 如果将它们组合为一个级别,则似乎有效

\n\n
my_data$carb <- factor(mtcars$carb)\nlevels(my_data$carb) <- c(1,2,3,4,5,5)\nplot_ly(data=my_data, x = ~wt, y = ~mpg, color = ~carb, size = ~wt)\n
Run Code Online (Sandbox Code Playgroud)\n

  • 我认为当有组只有一个观察值时(此处组 carb=6 和组 carb=8),就会出现该错误。此类组对应的气泡太大,其他都是正确的。 (2认同)