【问题标题】:Scaling data to secondary axis in R (ggplot2)将数据缩放到 R 中的辅助轴(ggplot2)
【发布时间】:2018-07-26 07:28:29
【问题描述】:

我正在尝试使用 ggplot2 构建一个折线图,其中我希望有 2 条线,每条线都适应不同的轴。我正在尝试以下代码(其中 df4 是我的数据框):

p1 = ggplot(df4, mapping = aes(x=taxon, y=cov, group = 1, colour = "Coverage", xlab("Cover"))) + 
geom_line() +
labs (x = "Taxon", y = "Coverage") +
geom_line(aes(y=depth, colour = "Depth")) +
theme(axis.text.x = element_text(angle = 75, hjust= 1, vjust = 1)) +
scale_colour_manual(values = c("navyblue", "green4")) +
scale_y_continuous(sec.axis = sec_axis(~./4, name = "Depth"))

有了这个,我可以建立一个有 2 条 y 轴和 2 条线的图表,但是两条线都适应了主要的 y 轴(次要轴在那里,但它没用)。是否有一个参数可以让我的数据遵循这个轴?

Blue line values only go until 1, so they should be adapted to the secondary axis

这是我的数据示例:

structure(list(taxon = structure(c(80L, 57L, 74L, 32L, 1L, 3L, 
41L, 9L, 70L, 12L), .Label = c("c__Tremellomycetes", "f__Listeriaceae", 
"f__Saccharomycetaceae", "g__Escherichia", "g__Klebsiella", "g__Pseudomonas", 
"g__Saccharomyces", "g__Salmonella", "g__Staphylococcus",    "s__Bacillus_amyloliquefaciens", 
"s__Bacillus_phage_phi105", "s__Bacillus_siamensis", "s__Bacillus_sp_JS", 
"s__Bacillus_subtilis", "s__Bacillus_vallismortis", "s__Citrobacter_sp_30_2", 
"s__Cronobacter_phage_ENT47670", "s__Enterobacter_cancerogenus", 
"s__Enterobacteria_phage_BP_4795", "s__Enterobacteria_phage_cdtI", 
"s__Enterobacteria_phage_ES18", "s__Enterobacteria_phage_fiAA91_ss", 
"s__Enterobacteria_phage_HK629", "s__Enterobacteria_phage_IME10", 
"s__Enterobacteria_phage_lambda", "s__Enterobacteria_phage_mEp237", 
"s__Enterobacteria_phage_mEp460", "s__Enterobacteria_phage_Min27", 
"s__Enterobacteria_phage_P22", "s__Enterobacteria_phage_YYZ_2008", 
"s__Enterococcus_faecalis", "s__Enterococcus_gilvus", "s__Enterococcus_phage_phiEf11", 
"s__Enterococcus_phage_phiFL1A", "s__Enterococcus_phage_phiFL3A", 
"s__Escherichia_coli", "s__Escherichia_phage_HK639", "s__Escherichia_phage_P13374", 
"s__Lactobacillus_fermentum", "s__Listeria_innocua", "s__Listeria_ivanovii", 
"s__Listeria_marthii", "s__Listeria_monocytogenes", "s__Listeria_phage_2389", 
"s__Listeria_phage_A118", "s__Listeria_phage_A500", "s__Paenibacillus_sp_ICGEB2008", 
"s__Phage_Gifsy_1", "s__Phage_Gifsy_2", "s__Pseudomonas_aeruginosa", 
 "s__Pseudomonas_mendocina", "s__Pseudomonas_phage_B3", "s__Pseudomonas_phage_D3", 
 "s__Pseudomonas_phage_DMS3", "s__Pseudomonas_phage_F10", "s__Pseudomonas_phage_F116", 
 "s__Pseudomonas_phage_PAJU2", "s__Pseudomonas_phage_Pf1",   "s__Pseudomonas_phage_phi297", 
"s__Pseudomonas_sp_2_1_26", "s__Pseudomonas_sp_P179",  "s__Salmonella_enterica", 
"s__Salmonella_phage_Fels_1", "s__Salmonella_phage_Fels_2",  "s__Salmonella_phage_SETP13", 
"s__Salmonella_phage_ST64B", "s__Shigella_phage_Sf6", "s__Staphylococcus_aureus", 
"s__Staphylococcus_phage_42E", "s__Staphylococcus_phage_55", 
"s__Staphylococcus_phage_80alpha", "s__Staphylococcus_phage_P954", 
"s__Staphylococcus_phage_phi2958PVL", "s__Staphylococcus_phage_phiMR25", 
"s__Staphylococcus_phage_phiN315", "s__Staphylococcus_phage_phiNM3", 
"s__Staphylococcus_phage_phiPVL_CN125", "s__Staphylococcus_phage_phiPVL108", 
"s__Staphylococcus_phage_PT1028", "s__Staphylococcus_phage_StauST398_1", 
"s__Staphylococcus_phage_StauST398_3",  "s__Staphylococcus_prophage_phiPV83", 
"s__Stx2_converting_phage_1717", "s__Stx2_converting_phage_86"
), class = "factor"), cov = c(0.987654320987654, 0.99685534591195, 
0.994535519125683, 0.147003745318352, 0.390923694779116,  0.92831541218638, 
0.99079754601227, 0.993055555555556, 0.497512437810945, 0.58144695960941
), depth = c(1.68148148148148, 0.99685534591195, 0.994535519125683, 
0.147003745318352, 0.390923694779116, 0.92831541218638, 0.99079754601227, 
1.34722222222222, 0.497512437810945, 0.58144695960941)), .Names =         c("taxon", 
"cov", "depth"), row.names = c(40L, 10L, 58L, 44L, 7L, 55L, 29L, 
13L, 2L, 53L), class = "data.frame")

【问题讨论】:

  • 欢迎来到 Stack Overflow!请提供example data 以使您的问题可重现!
  • @jaySf 我应该上传一个带有示例数据的小文件,还是只编辑我的评论并复制我的部分数据框?谢谢:)
  • 如果数据集太大而无法重现数据,请使用 dput(df) 或 dput(head(df))。
  • @rar OP 的数据被称为df4,不过!
  • @SoniaOlaecheaLázaro 您可以添加dput(df4[sample(nrow(df4), 10), ]) 的输出作为对您问题的编辑。这将是十行的随机样本。

标签: r ggplot2 linechart


【解决方案1】:

您只需将“深度”geom_line 乘以 4:

ggplot(df4, mapping = aes(x=taxon, y=cov, group = 1, colour = "Coverage", xlab("Cover"))) + 
geom_line() +
labs (x = "Taxon", y = "Coverage") +
geom_line(aes(y=depth * 4, colour = "Depth")) +
theme(axis.text.x = element_text(angle = 75, hjust= 1, vjust = 1)) +
scale_colour_manual(values = c("navyblue", "green4")) +
scale_y_continuous(sec.axis = sec_axis(~./4, name = "Depth"))

【讨论】:

    猜你喜欢
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多