首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用forcats::fct_infreq()后用因素重新排序调色板

使用forcats::fct_infreq()后用因素重新排序调色板
EN

Stack Overflow用户
提问于 2022-07-17 23:21:08
回答 1查看 50关注 0票数 0

我正在使用geom_histogram显示一些调查数据,并希望使用forcats::fct_infreq对这些因素进行排序。

我正在使用一个自定义调色板来匹配一个主题,不幸的是,顺序调色板变得乱七八糟。仅仅重新排序调色板以匹配因素的顺序似乎也不起作用,因为某些原因。

下面的例子。希望有人能用一个更好的方法或一个简单的解决方案来解决这个相对较小但却很烦人的问题。

代码语言:javascript
复制
library(tidyverse)

df <- tibble(
  response = c(1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9,10, 10,10, 10,10, 10,10, 10,11, 12,12, 12,12, 12,13, 13,13, 13,13, 14,14, 14,14, 14,14, 14,14, 14,14, 15,15, 15,16, 16,17, 17,17, 18,18, 19,19, 19,20, 20,20, 20,20, 21,21, 21,21, 22,23, 23,23, 23,23, 24,24, 24,24, 25,25, 25,26, 26,27, 28,29, 29,29, 29,29, 29,30, 30,30, 30,30, 31,31, 32,32, 32,33, 33,33, 33,33, 34,34,34,34, 34,34, 34,34, 34,35, 35,35, 35,35, 35,36, 36,36, 36,1),
  Q4 = c("Ratings","Reviews","Reading challenge","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","Shelves","Ratings","Reviews","Reading challenge","Recommendations","Search books","Explore","My Year in Books","Ratings","Reviews","Progress tracking","Search books","Lists","Shelves","Ratings","Reading challenge","Lists","My Year in Books","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","My Year in Books","Shelves","Ratings","Reviews","Reading challenge","Search books","My Year in Books","Ratings","Reviews","Groups","Lists","Explore","Ratings","Reading challenge","Search books","Lists","My Year in Books","Ratings","Reviews","Progress tracking","Reading challenge","Recommendations","Search books","Explore","My Year in Books","Search books","Ratings","Reviews","Progress tracking","Reading challenge","Search books","Progress tracking","Reading challenge","Recommendations","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Groups","Reading challenge","Recommendations","Search books","Lists","My Year in Books","Ratings","Groups","Reading challenge","Reviews","Recommendations","Ratings","Reviews","Search books","Ratings","Reviews","Shelves","Search books","My Year in Books","Shelves","Ratings","Reviews","Progress tracking","Search books","Shelves","Ratings","Search books","Lists","Shelves","Ratings","Reviews","Progress tracking","Search books","Lists","Ratings","Reviews","Progress tracking","Recommendations","Ratings","Reviews","Progress tracking","Shelves","Progress tracking","Search books","Progress tracking","Shelves","Ratings","Reviews","Recommendations","Search books","My Year in Books","Ratings","Reviews","Recommendations","Search books","Explore","Ratings","Reviews","Progress tracking","Recommendations","Search books","Shelves","Ratings","Progress tracking","Reading challenge","Search books","Shelves","Ratings","Reviews","Progress tracking","Recommendations","Search books","Lists","Explore","My Year in Books","Shelves","Ratings","Reviews","Reading challenge","Search books","Lists","Shelves","Ratings","Reviews","Recommendations","Scan books at library/bookstores")
  ) %>% 
  mutate_if(is.character, factor)

palette <- c('#e9e5cd', '#ddd6bb', '#d1c7aa', '#c4b89a', '#b8a98a', '#ac9b7b', '#9f8d6d', '#937f60', '#8d6f52', '#885f3b', '#7f5025', '#75420e')
代码语言:javascript
复制
# factors NOT in correct order, palette in correct order
df %>% 
  ggplot(aes(y=Q4, fill=Q4))+
  geom_histogram(stat="count")+
  scale_fill_manual(values=palette)+
  theme(legend.position = "none")

代码语言:javascript
复制
# factors in correct order, palette NOT in correct order
df %>% 
  ggplot(aes(y=forcats::fct_infreq(Q4), fill=Q4))+
  geom_histogram(stat="count")+
  scale_fill_manual(values=palette)+
  theme(legend.position = "none")

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-18 02:14:04

我用dplyr::tally代替了forcats::fct_infreq

代码语言:javascript
复制
df2 <- df %>% group_by(Q4) %>% tally() %>% arrange(desc(n))

df2
# A tibble: 12 × 2
   Q4                                   n
   <fct>                            <int>
 1 Ratings                             27
 2 Search books                        24
 3 Reviews                             23
 4 Progress tracking                   16
 5 Shelves                             15
 6 Reading challenge                   14
 7 Recommendations                     13
 8 My Year in Books                    12
 9 Lists                                9
10 Explore                              5
11 Groups                               3
12 Scan books at library/bookstores     1

#set levels based on the descending order
df2$Q4 <- factor(df2$Q4, levels=df2$Q4)  

#reverse order of palette
palette <- rev(palette)

df2 %>% 
  ggplot(aes(x=Q4, y=n, fill=Q4))+
  geom_col() + #plot with bar chart instead of relying on gghistogram
  scale_fill_manual(values=palette)+
  theme(legend.position = "none") +
  coord_flip()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73016017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档