我正在处理一个气泡图,其中我生成了两列,一列用于 colored颜色 id(列 colored颜色 ),另一列用于引用id的文本(列类).这是我个人的分类( colored颜色 总是属于类).

COME1039$Class <- as.factor(COME1039$Class, levels = c('moins de 100 000 F.CFP',
                                                       'entre 100 000 et 5 millions F.CFP',
                                                       'entre 5 millions et 1 milliard F.CFP',
                                                       'entre 1 milliard et 20 milliards F.CFP',
                                                       'plus de 20 milliards F.CFP'))

这是我的密码

g <- list(
  scope = 'world',
  visible = F,
  showland = TRUE,
  landcolor = toRGB("#EAECEE"),
  showcountries = T,
  countrycolor = toRGB("#D6DBDF"),
  showocean = T,
  oceancolor = toRGB("#808B96")
)

COM.g1 <- plot_geo(data = COME1039,
                   sizes = c(1, 700))
COM.g1 <- COM.g1 %>% add_markers(
  x = ~LONGITUDE,
  y = ~LATITUDE,
  name = ~Class,
  size = ~`Poids Imports`,
  color = ~Color,
  colors=c(ispfPalette[c(1,2,3,7,6)]),
  text=sprintf("<b>%s</b> <br>Poids imports: %s tonnes<br>Valeur imports: %s millions de F.CFP",
               COME1039$NomISO,
               formatC(COME1039$`Poids Imports`/1000,
                       small.interval = ",",
                       digits = 1,
                       big.mark = " ",
                       decimal.mark = ",",
                       format = "f"),
               formatC(COME1039$`Valeur Imports`/1000000,
                       small.interval = ",",
                       digits = 1,
                       big.mark = " ",
                       decimal.mark = ",",
                       format = "f")),
  hovertemplate = "%{text}<extra></extra>"
)
COM.g1 <- COM.g1%>% layout(geo=g)
COM.g1 <- COM.g1%>% layout(dragmode=F)
COM.g1 <- COM.g1 %>% layout(showlegend=T)
COM.g1 <- COM.g1 %>% layout(legend = list(title=list(text='Valeurs des importations<br>'),
                                          orientation = "h",
                                          itemsizing='constant',
                                          x=0,
                                          y=0)) %>% hide_colorbar()
COM.g1

不幸的是,我的数据太大,无法添加到此处,但这是我得到的输出:

enter image description here

如您所见,图例的顺序不是因子级别的顺序.如何获得它?如果数据是必需的,以帮助您给我一个提示,我将try 限制其大小.

非常感谢!

推荐答案

Plotly将按字母顺序排列你的传奇,你必须让它听进go .绘图中记录道的顺序是项目在图例中的显示顺序.因此,如果重新排列对象中的轨迹,将重新排列图例.

我没有你的数据,所以我用了一些rnaturalearth的数据.

首先,我用plot_geo创建了一个绘图.然后,我使用plotly_build()确保在Plotly对象中具有跟踪顺序.我用lapply来调查当前的轨迹顺序.然后我创建了一个新的顺序,重新排列了轨迹,并再次绘制.

最初的绘图和构建.

library(tidyverse)
library(plotly)
library(rnaturalearth)

canada <- ne_states(country = "Canada", returnclass = "SF")
x = plot_geo(canada, sizes = c(1, 700)) %>% 
  add_markers(x = ~longitude, y = ~latitude,
              name = ~name, color = ~name)
x <- plotly_build(x)            # capture all elements of the object

现在进行调查;更重要的是,您可以看到这一切是如何结合在一起的.

# what order are they in?
y = vector()
invisible(
  lapply(1:length(x$x$data), 
         function(i) {
           z <- x$x$data[[i]]$name
           message(i, " ", z)
         })
)
# 1 Alberta
# 2 British Columbia
# 3 Manitoba
# 4 New Brunswick
# 5 Newfoundland and Labrador
# 6 Northwest Territories
# 7 Nova Scotia
# 8 Nunavut
# 9 Ontario
# 10 Prince Edward Island
# 11 Québec
# 12 Saskatchewan
# 13 Yukon

在您的问题中,您表明您将图例元素作为一个因素.这也是我对这些数据所做的.

can2 = canada %>% 
  mutate(name = ordered(name,
                        levels = c("Manitoba", "New Brunswick", 
                                   "Newfoundland and Labrador", 
                                   "Northwest Territories", 
                                   "Alberta", "British Columbia", 
                                   "Nova Scotia", "Nunavut", 
                                   "Ontario", "Prince Edward Island", 
                                   "Québec", "Saskatchewan", "Yukon")))

我使用这些数据对Plotly对象中的轨迹重新排序.这将创建一个向量.它从级别及其行号或顺序(1:13)开始.然后,我按级别按字母顺序排列数据(因此它与Plotly对象中的当前顺序相匹配).

这组函数调用的输出是数字向量(即5、6、1等).因为我有13个名字,所以我有1:13.你总是可以让它充满活力,也可以是1:length(levels(can2$name).

# capture order
df1 = data.frame(who = levels(can2$name), ord = 1:13) %>% 
  arrange(who) %>% select(ord) %>% unlist()

现在剩下的就是重新排列对象轨迹并将其可视化.

x$x$data = x$x$data[order(c(df1))] # reorder the traces
x      # visualize

原来:

enter image description here

使用重新排序的跟踪:

enter image description here

R相关问答推荐

仅在ggplot的每个方面绘制最丰富的物种

在R中,将一个函数作为输入传递给另一个函数时进行参数判断

使用预定值列表将模拟数量(n)替换为rnorm()

咕噜中的元素列表:map

为什么在ggplot2中添加geom_text这么慢?

筛选出以特定顺序患病的个体

如何在区分不同条件的同时可视化跨时间的连续变量?

`lazy_dt`不支持`dplyr/across`?

如何在R中通过多个变量创建交叉表?

汇总数据帧中的复制列,保持行的唯一性

如何计算R glm probit中的线性预测因子?

R如何将列名转换为更好的年和月格式

创建列并对大型数据集中的特定条件进行成对比较的更高效程序

如何使用FormC使简单算术运算得到的数字是正确的?

R中治疗序列的相对时间指数

是否有可能从边界中找到一个点值?

构建一个6/49彩票模拟系统

变异以按组从其他列创建具有最大和最小值的新列

在使用SliderInput In Shiny(R)设置输入数据的子集时,保留一些情节痕迹

抽样变换-REXP与RWEIBUR