使用多面图设置 X 轴标签

问题描述 投票:0回答:1
我正在尝试创建一个多面图,其中每个组都有不同数量的数据点和不同的 x 轴标签。对于由 SID_2 分面的每个图,我希望 x 轴是当前顺序的 FULL.STATUS(即 SBV/MET 之前、MET 期间、MET 之后),并为每个数据点标记 x 轴。为了克服这个问题并保留当前顺序,我设置 x = (paste0(SERIAL, FULL.STATUS))。但是,我要么无法让标签在第一个图(第一个代码示例)之后正常工作,要么让标签根本改变(下面的第二个代码示例)

输入数据为:

> dput(df) structure(list(ID = c(3L, 6L, 8L, 9L, 10L, 12L, 14L, 16L, 17L, 52L, 54L, 59L, 60L, 61L, 64L, 66L, 69L, 70L, 81L, 83L, 85L, 86L, 167L, 168L, 178L, 183L, 193L, 194L, 196L, 229L, 233L, 247L, 249L, 256L, 257L, 302L, 303L, 311L, 312L, 314L, 316L, 318L, 319L, 359L, 360L, 361L, 363L, 366L, 368L, 369L, 387L, 388L, 391L, 392L, 393L, 395L, 398L, 400L, 401L, 455L, 456L, 457L, 459L, 467L, 468L, 516L, 517L, 522L, 532L, 533L, 535L, 540L, 541L), UID = c("UAB003_W1D3", "UAB003_W1D6", "UAB003_W2D1", "UAB003_W2D2", "UAB003_W2D3", "UAB003_W2D5", "UAB003_W2D7", "UAB003_W3D2", "UAB003_W3D3", "UAB003_W8D3", "UAB003_W8D5", "UAB003_W9D3", "UAB003_W9D4", "UAB003_W9D5", "UAB003_W10D1", "UAB003_W10D3", "UAB003_W10D6", "UAB003_W10D7", "UAB005_W2D4", "UAB005_W2D6", "UAB005_W3D1", "UAB005_W3D2", "UAB017_W4D6", "UAB017_W4D7", "UAB017_W6D3", "UAB017_W7D1", "UAB017_W8D4", "UAB017_W8D5", "UAB017_W8D7", "UAB053_W3D3", "UAB053_W3D7", "UAB053_W5D7", "UAB053_W6D2", "UAB053_W7D2", "UAB053_W7D3", "UAB127_W3D6", "UAB127_W3D7", "UAB127_W5D1", "UAB127_W5D2", "UAB127_W5D4", "UAB127_W5D6", "UAB127_W6D1", "UAB127_W6D2", "UAB128_W1D7", "UAB128_W2D1", "UAB128_W2D2", "UAB128_W2D4", "UAB128_W2D7", "UAB128_W3D2", "UAB128_W3D3", "UAB128_W5D7", "UAB128_W6D1", "UAB128_W6D4", "UAB128_W6D5", "UAB128_W6D6", "UAB128_W7D1", "UAB128_W7D4", "UAB128_W7D6", "UAB128_W7D7", "UAB130_W5D5", "UAB130_W5D6", "UAB130_W5D7", "UAB130_W6D2", "UAB130_W7D3", "UAB130_W7D4", "UAB135_W4D3", "UAB135_W4D4", "UAB135_W5D2", "UAB135_W6D5", "UAB135_W6D6", "UAB135_W7D1", "UAB135_W7D6", "UAB135_W7D7"), SERIAL = c(3, 6, 8, 9, 10, 12, 14, 16, 17, 52, 54, 59, 60, 61, 64, 66, 69, 70, 11, 13, 15, 16, 27, 28, 38, 43, 53, 54, 56, 17, 21, 35, 37, 44, 45, 20, 21, 29, 30, 32, 34, 36, 37, 7, 8, 9, 11, 14, 16, 17, 35, 36, 39, 40, 41, 43, 46, 48, 49, 33, 34, 35, 37, 45, 46, 24, 25, 30, 40, 41, 43, 48, 49 ), FULL.STATUS = structure(c(1L, 1L, 2L, 4L, 4L, 4L, 4L, 5L, 5L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 5L, 5L, 4L, 4L, 5L, 5L, 1L, 1L, 3L, 2L, 4L, 5L, 5L, 1L, 1L, 2L, 4L, 5L, 5L, 1L, 1L, 4L, 4L, 4L, 4L, 5L, 5L, 1L, 1L, 4L, 4L, 4L, 5L, 5L, 1L, 1L, 3L, 2L, 4L, 4L, 4L, 5L, 5L, 1L, 1L, 3L, 2L, 5L, 5L, 1L, 1L, 3L, 2L, 4L, 4L, 5L, 5L), levels = c("Prior to SBV", "Prior to MET", "BV DX", "During MET", "After MET"), class = "factor"), SID_2 = c("UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_1", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB003_2", "UAB005", "UAB005", "UAB005", "UAB005", "UAB017", "UAB017", "UAB017", "UAB017", "UAB017", "UAB017", "UAB017", "UAB053", "UAB053", "UAB053", "UAB053", "UAB053", "UAB053", "UAB127", "UAB127", "UAB127", "UAB127", "UAB127", "UAB127", "UAB127", "UAB127", "UAB128_1", "UAB128_1", "UAB128_1", "UAB128_1", "UAB128_1", "UAB128_1", "UAB128_1", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB128_2", "UAB130", "UAB130", "UAB130", "UAB130", "UAB130", "UAB130", "UAB135", "UAB135", "UAB135", "UAB135", "UAB135", "UAB135", "UAB135", "UAB135"), qPCR = c(84357426.45, 6186733.732, 86414183.14, 80389727.99, 47572751.5, 70069273, 4077122.646, 71453844.41, 65872088.12, 83328729.17, 8906037.935, 18009627.79, 28865890.7, 85841954.84, 20235781.55, 43756722.66, 17567154.37, 15964495.24, 27434871.89, 28583421.42, 2483185.601, 5743281.503, 127263876.9, 130982313.8, 129052243.5, 143329467.8, 7336611.055, 6586118.969, 4145759.146, 11210118.55, 41310054.47, 11578728.32, 1594562.837, 14011425.17, 198974708.8, 50992796.44, 53301083.25, 13156344.25, 1450333.006, 25315027.35, 96193455.87, 21462.37382, 3822918.871, 8251389.613, 43783237.45, 31670738.47, 27658728.83, 81428548.86, 490949.1827, 11377586.28, 36997779.7, 139884734.8, 13876393.83, 52021527.18, 92654775.82, 20010084.16, 19318723.06, 2866721.197, 8542890.537, 74169368.09, 48313061.47, 29083954.73, 224372049.9, 3497495.799, 28967103.84, 88451730.83, 93042191.29, 444012594.1, 77514255.66, 45168334.73, 25336891.98, 2524240.819, 2550436.416)), class = "data.frame", row.names = c(3L, 6L, 8L, 9L, 10L, 12L, 14L, 16L, 17L, 52L, 54L, 59L, 60L, 61L, 64L, 66L, 69L, 70L, 81L, 83L, 85L, 86L, 167L, 168L, 178L, 183L, 193L, 194L, 196L, 229L, 233L, 247L, 249L, 256L, 257L, 302L, 303L, 311L, 312L, 314L, 316L, 318L, 319L, 359L, 360L, 361L, 363L, 366L, 368L, 369L, 387L, 388L, 391L, 392L, 393L, 395L, 398L, 400L, 401L, 455L, 456L, 457L, 459L, 467L, 468L, 516L, 517L, 522L, 532L, 533L, 535L, 540L, 541L))
我尝试了太多的事情,无法全部列出,但有几件事是:

# Create a vector of ordered labels of Status IDs labs <- df$FULL.STATUS labs2 <- paste0(df$SERIAL, df$FULL.STATUS) final <- setNames(labs2, labs) final.factors <- factor(final, levels = unique(final)) # Plot total abundance profiles with updated qPCR data ggplot(df, aes(x = (paste0(SERIAL, FULL.STATUS)), y = qPCR, group = SID_2)) + geom_line() + geom_point(size = 1) + facet_wrap(~SID_2, scales = "free", nrow = 2) + theme_bw() + theme(legend.position = "none", text = element_text(size = 6), axis.text.x = element_text(angle = 90, hjust = 1)) + scale_x_discrete(labels = labs) + ylab("Total Abundance") + xlab("") + ggtitle("Met Study - Complete qPCR Data")

# Create a vector of ordered labels of Status IDs labs <- df$FULL.STATUS labs2 <- paste0(df$SERIAL, df$FULL.STATUS) final <- setNames(labs2, labs) final.factors <- factor(final, levels = unique(final)) # Plot total abundance profiles with updated qPCR data ggplot(df, aes(x = (paste0(SERIAL, FULL.STATUS)), y = qPCR, group = SID_2)) + geom_line() + geom_point(size = 1) + facet_wrap(~SID_2, scales = "free", nrow = 2) + theme_bw() + theme(legend.position = "none", text = element_text(size = 6), axis.text.x = element_text(angle = 90, hjust = 1)) + scale_x_discrete(labels = final.factors) + ylab("Total Abundance") + xlab("") + ggtitle("Met Study - Complete qPCR Data")

如果有人可以帮助我,我将非常感激!谢谢!

r ggplot2 facet-wrap x-axis
1个回答
0
投票
我使用 tidytext 和向量的组合来解决这个问题,尽管它可能不是最优雅的代码。我创建了最独特的 x 轴变量名称和具有相同名称的向量。我使用该向量设置数据帧的因子级别,然后使用scale_x_reordered()从轴标签中删除文本。

# Create a vector of ordered labels of Status IDs labs <- df$FULL.STATUS lvls <- paste0(df$FULL.STATUS,"___",df$SERIAL,df$ID) unique.lvls <- lvls[!duplicated(lvls)] # Reformat FULL.STATUS column so x-axis labels are correct in faceted df <- df %>% mutate(FULL.STATUS = reorder_within(FULL.STATUS, ID, SERIAL), FULL.STATUS = paste0(FULL.STATUS, ID)) df$FULL.STATUS <- factor(df$FULL.STATUS, levels = unique.lvls) # Plot total abundance profiles with updated qPCR data ggplot(df, aes(x = FULL.STATUS, y = qPCR, group = SID_2)) + geom_line() + geom_point(size = 1) + facet_wrap(~SID_2, scales = "free", nrow = 2) + theme_bw() + theme(legend.position = "none", text = element_text(size = 6), axis.text.x = element_text(angle = 90, hjust = 1)) + ylab("Total Abundance") + xlab("") + scale_x_reordered() + ggtitle("Met Study - Complete qPCR Data")
我希望这对某人有帮助!

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