繁体   English   中英

如何重新排列图表和图例中的条形

[英]How to reorder bars in the chart and the legend

我正在努力按照数据结构(SD、MB、FI、FO、NP)重新排序图中的条形和图例。 这是我的数据;

    Data <- tibble::tribble(
  ~Year,    ~SD,    ~MB,      ~FI,       ~FO,       ~NP,
  "2010",   41,     36.7,    10.2,        5.3,     6.8,
  "2011",   49.1,   50.9,    NA,          NA,      NA,
  "2012",   41.1,   32.4,    11.4,        8.6,     6.4,
  "2013",   38.9,   29.6,    10,          13.7,    7.7,
  "2014",   38.8,   36.5,    5.2,         10.4,    9,
  "2015",   43.4,   39.1,    NA,          11.9,    5.5, 
  "2016",   40.6,   38,      10.5,        8.8,     2.2,
  "2017",   38.3,   42.3,    9.7,         6.8,     2.9,
  "2018",   37.8,   40.3,    9.3,         10.6,    2,
  "2019",   33.8,   41.6,    8.1,         14.2,    2.3

)

编码;

    Data %>%
  pivot_longer(-Year) %>% 
  ggplot(aes(x = Year, y = value, fill = name, reorder(TRUE))) +  ylab("Students") +
  xlab("Year") +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ Year, scales = 'free_x', ncol = 10, strip.position = "bottom") +
  theme_minimal() +
  theme(axis.title.x=element_blank(),
         axis.text.x=element_blank(),
         axis.ticks.x=element_blank()+
   theme(strip.placement  = "outside",
         panel.spacing    = unit(0, "points"),
        axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        strip.background = element_blank(),
        strip.background.y = element_blank(),
        panel.background = element_rect(fill = "white"),
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank(), 
        strip.text       = element_text(face = "bold", size = 9)) +
   scale_fill_continuous(name = "Legend", label = c("SD","MB","FI","FO","NP", ordered(TRUE))) + 
   theme(legend.position = "right", axis.text.x = element_text(angle = 90,vjust = 0.4)))

先感谢您。

这是对代码的编辑:

csv 文件在这里: https ://1drv.ms/x/s!AjskoWp__th-kEJOld80Tb0Bxx-C?e =JoSmGf

Rtutorial <- read.csv("C:Desktop/statistics/Rtutorial.csv", header=TRUE)

Rtutorial<-as.data.frame(Rtutorial)

library(ggplot2)
library(tidyr)
library(dplyr)

Rtutorial %>%

  pivot_longer(c(-Year, -Total))) %>%

  mutate(name = factor(name, levels=c('Total',
                                      'Sable-Antelope',
                                      'Monkey',
                                      'Frogs and reed buck',
                                      'Fox and jackals',
                                      'Side striped jackal'
                                    ))) %>%

  ggplot(aes(x=as.factor(Year), y=value, fill=name, reorder(TRUE))) +
  scale_y_continuous(labels = scales::comma_format()) +
  ylab("Total Population") +
  xlab("Year") +
  labs(fill="Legend") + 
  geom_bar(stat = "identity", position = "dodge") +
  theme_classic() +
  theme(strip.placement  = "outside",
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank() ,
    legend.position = "right", 
    axis.text.x = element_text(angle = 0, vjust = 0)) +
  scale_fill_brewer(palette = "Greens", name = "Legend", label=c('Total 
Population','Sable-Antelope','Monkey','Frogs and reed buck','Fox and 
jackals','Side striped jackal', ordered(T)) + 
theme(legend.position = "right", axis.text.x = element_text(angle = 
90,vjust = 0.4)))

我在运行代码时仍然出现错误,我尝试查看stackoverflow上的几个示例,但看不出问题出在哪里。

我得到的错误之一是因子错误 - 名称。

如果你把这一行:

  mutate(name = factor(name, levels=c("SD","MB","FI","FO","NP"))) %>%

在您的pivot_longer(-Year)函数之后,它应该可以工作。 这将使变量name成为一个因子,并根据需要排序级别。

Data %>%
  pivot_longer(-Year) %>% 
  mutate(name = factor(name, levels=c("SD","MB","FI","FO","NP"))) %>%
  ggplot(aes(x = Year, y = value, fill = name, reorder(TRUE))) +  ylab("Students") +
  xlab("Year") +
  geom_bar(stat = "identity", position = "dodge") +
  facet_wrap(~ Year, scales = 'free_x', ncol = 10, strip.position = "bottom") +
  theme_minimal() +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank()+
          theme(strip.placement  = "outside",
                panel.spacing    = unit(0, "points"),
                axis.title.x=element_blank(),
                axis.text.x=element_blank(),
                axis.ticks.x=element_blank(),
                strip.background = element_blank(),
                strip.background.y = element_blank(),
                panel.background = element_rect(fill = "white"),
                panel.grid.major = element_blank(),
                panel.grid.minor = element_blank(),
                panel.border = element_blank(), 
                strip.text       = element_text(face = "bold", size = 9)) +
          scale_fill_continuous(name = "Legend", label = c("SD","MB","FI","FO","NP", ordered(TRUE))) + 
          theme(legend.position = "right", axis.text.x = element_text(angle = 90,vjust = 0.4)))

在此处输入图片说明


编辑- 在下面回答评论。

您可以稍微简化该功能,如下所示:

Data <- tibble::tribble(
  ~Year,    ~`Sable-Antelope`,    ~`Monkey`,      ~`Frogs and reed buck`,       ~`Fox and jackals`,       ~`Side striped jackal`,
  "2010",   41,     36.7,    10.2,        5.3,     6.8,
  "2011",   49.1,   50.9,    NA,          NA,      NA,
  "2012",   41.1,   32.4,    11.4,        8.6,     6.4,
  "2013",   38.9,   29.6,    10,          13.7,    7.7,
  "2014",   38.8,   36.5,    5.2,         10.4,    9,
  "2015",   43.4,   39.1,    NA,          11.9,    5.5, 
  "2016",   40.6,   38,      10.5,        8.8,     2.2,
  "2017",   38.3,   42.3,    9.7,         6.8,     2.9,
  "2018",   37.8,   40.3,    9.3,         10.6,    2,
  "2019",   33.8,   41.6,    8.1,         14.2,    2.3)


Data %>%
  pivot_longer(-Year) %>% 
  mutate(name = factor(name, levels=c("Sable-Antelope",
                                      "Monkey",
                                      "Frogs and reed buck",
                                      "Fox and jackals",
                                      "Side striped jackal"))) %>%
  ggplot(aes(x = Year, y = value, fill = name)) +  
  ylab("Students") +
  xlab("Year") +
  labs(fill="Legend") + 
  geom_bar(stat = "identity", position = "dodge") +
  scale_fill_brewer(palette="Greens") +  
  theme_minimal() +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.border = element_blank() ,
    legend.position = "right", 
    axis.text.x = element_text(angle = 0, vjust = 7.5))```

在此处输入图片说明


编辑 2 - 使用更新的数据和语法。

有几件事会阻止您的代码运行。

  1. 看起来您还需要图中的Total组,因此您不应在pivot_longer()函数中将其pivot_longer()
  2. pivot_longer()的末尾有一个额外的括号
  3. 当您在变量名称中使用read.csv()空格时,将替换为句点,因此您指定的级别将不起作用。 您必须将级别指定为带句点的名称,将标签指定为带空格而不是句点的名称。
  4. 虽然问题较少,但第二个theme()调用覆盖了第一个theme()调用中的内容。 这些可以结合起来。

下面的代码解决了这些问题。

Rtutorial %>%
  
  pivot_longer(c(-Year)) %>%
  
  mutate(name = factor(name, levels=c('Total',
                                       'Sable.Antelope',
                                       'Monkey',
                                       'Frogs.and.reed.buck',
                                       'Fox.and.jackals',
                                       'Side.striped.jackal'), 
                             labels=c('Total',
                                      'Sable-Antelope',
                                      'Monkey',
                                      'Frogs and reed buck',
                                      'Fox and jackals',
                                      'Side striped jackal'))) %>%
  
  ggplot(aes(x=as.factor(Year), y=value, fill=name, reorder(TRUE))) +
  scale_y_continuous(labels = scales::comma_format()) +
  ylab("Total Population") +
  xlab("Year") +
  labs(fill="Legend") + 
  geom_bar(stat = "identity", position = "dodge") +
  theme_classic() +
  theme(strip.placement  = "outside",
        panel.grid.major = element_blank(),
        panel.grid.minor = element_blank(),
        panel.border = element_blank() ,
        legend.position = "right", 
        axis.text.x = element_text(angle = 90,vjust = 0.4)) +
  scale_fill_brewer(palette = "Greens", name = "Legend")  

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM