如果重复,则按姓名排序

问题描述 投票:0回答:1

我想按数值降序排列,如果数值重复,城市名称必须按字母顺序出现。

library(plotly)

city   <- c("Paris", "New York", "Rio", "Salvador", "Curitiba", "Natal")
value  <- c(10,20,30,10,10,10)

data   <- data.frame(city, value, stringsAsFactors = FALSE)

data$city <- factor(data$city, levels = unique(data$city)[order(data$value, decreasing = FALSE)])


fig <- plot_ly(y = data$city, x = data$value, type = "bar", orientation = 'h')
r plotly
1个回答
1
投票

可以使用数据框架的顺序功能实现。在值列上应用顺序,(-)号表示递减,然后在城市名称上应用顺序。

data_ordered <- data[order(-data$value, data$city),]
data_ordered
     city value
3      Rio    30
2 New York    20
5 Curitiba    10
6    Natal    10
1    Paris    10
4 Salvador    10

data_ordered$city <- factor(data_ordered$city, levels = data_ordered$city)

plot_ly(y = data_ordered$city, x = data_ordered$value, type = "bar", orientation = 'h') %>%
  layout(yaxis = list(autorange = "reversed"))

1
投票

使用tidyverse,我建议:

library(tidyverse)

city   <- c("Paris", "New York", "Rio", "Salvador", "Curitiba", "Natal")
value  <- c(10,20,30,10,10,10)

data   <- data.frame(city, value)
db <- as_tibble(data)

db %>%
  ggplot(aes(x = reorder(city, -value), y=value))+
  geom_col()

在 "x "的定义中使用 "reorder "函数来做你想要的东西,并且尊重字母顺序。

如果想让这个图垂直,可以在最后添加 coord_flip.如果你想重新排序,"-value "可以切换到 "value"。

library(tidyverse)

city   <- c("Paris", "New York", "Rio", "Salvador", "Curitiba", "Natal", "Zoo", "Aaa")
value  <- c(10,20,30,10,10,10,10,10)

data   <- data.frame(city, value)
db <- as_tibble(data)

db %>%
  ggplot(aes(x = reorder(city, value), y=value))+
  geom_col() +
  coord_flip()
© www.soinside.com 2019 - 2024. All rights reserved.