我想做一个条形图,y轴上有两个不同的值,x轴上有被躲避的值。

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

我一直在寻找一堆答案,但我找不到任何能回答我问题的答案。我有以下数据集。

structure(list(Quail = c("28", "28", "28", "28", "29", "29", 
"29", "29", "30", "30", "30", "30", "4", "4", "4", "4", "4", 
"5", "5", "5", "5", "5", "6", "6", "6", "6", "16", "16", "16", 
"16", "17", "17", "17", "17", "17", "18", "18", "18", "18", "52", 
"52", "52", "52", "53", "53", "53", "53", "54", "54", "54", "54"
), day = c(1, 3, 5, 7, 1, 3, 5, 9, 1, 3, 5, 7, 1, 3, 5, 7, 9, 
1, 3, 5, 7, 9, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3, 5, 
7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7), Group = c("var", "var", 
"var", "var", "var", "var", "var", "var", "var", "var", "var", 
"var", "varL", "varL", "varL", "varL", "varL", "varL", "varL", 
"varL", "varL", "varL", "varL", "varL", "varL", "varL", "varLQ", 
"varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", 
"varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varQ", "varQ", 
"varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", 
"varQ", "varQ"), Equi = c(NA, 5.966699108, 2.179348795, NA, NA, 
5.47029668, 4.606832566, 4.123227924, NA, 6.200198499, 3.807239274, 
2.121998353, NA, 6.122346998, 3.161297444, 2.618107834, 2.488914738, 
NA, 5.80659996, 3.272308721, 3.012209525, 2.750162661, NA, 5.752224579, 
4.885757526, 2.515186667, NA, 5.494711674, 4.665176685, 4.017052221, 
NA, 6.165528697, 4.969614582, 2.894064483, 2.600701052, NA, 6.368332793, 
4.316409804, 6.030505124, NA, 5.173073878, 4.038968216, 2.859379995, 
NA, NA, 4.17091987, 2.916909106, NA, 5.926815246, 5.910377652, 
NA), Norm.pi = c(5.8, 3.9, 3.1, 2.5, 4.7, 2.5, 5.1, 10.1, 3.4, 
2.8, 5.4, 2.6, 4.3, 0.9, 4, 7.3, 4.1, 5.8, 1.8, 4.2, 8.5, 20.4, 
4.6, 2.1, 4.3, 11.3, 2.5, 2.9, 4, 4.4, 2.7, 2.2, 2.7, 5.6, 4.5, 
2.5, 2, 4.5, 7.1, 5.4, 2.6, 5.1, 8.3, 6.7, 2.8, 3.6, 4.6, 5.8, 
3, 3, 6.3)), row.names = c(NA, -51L), groups = structure(list(
    Quail = c("16", "16", "16", "16", "17", "17", "17", "17", 
    "17", "18", "18", "18", "18", "28", "28", "28", "28", "29", 
    "29", "29", "29", "30", "30", "30", "30", "4", "4", "4", 
    "4", "4", "5", "5", "5", "5", "5", "52", "52", "52", "52", 
    "53", "53", "53", "53", "54", "54", "54", "54", "6", "6", 
    "6", "6"), day = c(1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3, 5, 7, 
    1, 3, 5, 7, 1, 3, 5, 9, 1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3, 
    5, 7, 9, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7), 
    Group = c("varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", 
    "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", 
    "var", "var", "var", "var", "var", "var", "var", "var", "var", 
    "var", "var", "var", "varL", "varL", "varL", "varL", "varL", 
    "varL", "varL", "varL", "varL", "varL", "varQ", "varQ", "varQ", 
    "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", 
    "varQ", "varL", "varL", "varL", "varL"), .rows = list(27L, 
        28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L, 
        39L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 
        13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 40L, 
        41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L, 
        23L, 24L, 25L, 26L)), row.names = c(NA, -51L), class = c("tbl_df", 
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

我使用ggplot作为。

DI.pi.equi.extended %>%
  ggplot() +
    geom_bar(aes(x=day, y=Norm.pi), stat = "identity", fill = "red") +
    geom_bar(aes(x=day,y=Equi), stat = "identity") +

  theme(panel.grid.major =  element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text.x = element_text(),
        axis.title.y = element_text(face = "bold", size = 22),
        legend.direction = "vertical", legend.box = "horizontal") +
  scale_x_continuous(breaks = c(1,3, 5, 7, 9), limits = c(0,10))  +
    scale_y_continuous(sec.axis = sec_axis(~ . + 10)) +
  facet_grid(.~Quail + Group, scales = "free_y") 

这产生了以下的叠加图。

enter image description here

我想绘制的其实是pi.Norm和Equi并排的图,就像dodged的那样,但到目前为止我还不能让它工作。

有什么建议吗?

先非常感谢您。

r ggplot2 geom-bar
1个回答
1
投票

诀窍是在绘制之前将数据集转换为长格式,例如:. tidyr::pivot_longer. 试试这个。

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

DI.pi.equi.extended %>%
  tidyr::pivot_longer(c(Equi, Norm.pi), names_to = "name", values_to = "value") %>% 
  ggplot() +
  geom_bar(aes(x=day, y=value, fill = name), stat = "identity", position = "dodge") +
  scale_fill_manual(values = c(Norm.pi = "red", Equi = "grey")) +
  theme(panel.grid.major =  element_blank(),
        panel.grid.minor = element_blank(),
        panel.background = element_blank(),
        axis.line = element_line(colour = "black"),
        axis.text.x = element_text(),
        axis.title.y = element_text(face = "bold", size = 22),
        legend.direction = "vertical", legend.box = "horizontal") +
  scale_x_continuous(breaks = c(1,3, 5, 7, 9), limits = c(0,10))  +
  scale_y_continuous(sec.axis = sec_axis(~ . + 10)) +
  facet_grid(.~Quail + Group, scales = "free_y") 
#> Warning: Removed 15 rows containing missing values (geom_bar).

创建于2020-05-19,作者: 重读包 (v0.3.0)

© www.soinside.com 2019 - 2024. All rights reserved.