用两个y轴在R中绘图

用两个y轴在R中绘图,r,plot,R,Plot,所以我有一个数据框,看起来像这样: 我试图画出这个图,这样“癌症”在x轴上,然后“oddsRatio”和“foldIncrease”都是y轴参数。理想情况下,我有一个条形图,每个癌症的oddsRatio和FoldIngress相邻,并通过颜色进行区分 这是我能得到的最接近的结果: 使用以下代码: cancers = c("All Cancers", "SCLC", "Lu SCC", "Lung AC", "Larynx", "Pharynx Oral", "Cavity", "Esopha

所以我有一个数据框,看起来像这样:

我试图画出这个图,这样“癌症”在x轴上,然后“oddsRatio”和“foldIncrease”都是y轴参数。理想情况下,我有一个条形图,每个癌症的oddsRatio和FoldIngress相邻,并通过颜色进行区分

这是我能得到的最接近的结果:

使用以下代码:

cancers = c("All Cancers", "SCLC", "Lu SCC", "Lung AC", "Larynx", "Pharynx Oral", "Cavity", "Esophageal SCC", "Esophageal AC", "Bladder", "Liver", "Cervix", "Kidney", "Pancreas")
oddsRatio = c(1, 111.3, 103.5, 21.9, 13.2, 6.6, 4.2, 3.9, 3.9, 3.8, 2.9, 1.8, 1.7, 1.6)
foldIncrease = c(1.15464695360441, 0.858680717668245, 1.29986125563649, 4.56755645705811, 2.52922152922153, 0.818596228001855, 0.892133516869108, 1.04842410881178, 1.01791768793961, 1.1423932173087, 1.1871100629828, 0.857694671793762, 1.39573948596081, 1.33458517681876)

cancerData = data.frame(cancers, oddsRatio, foldIncrease)

par(mar = c(5,5,2,5))
with(cancerData, plot(cancers, oddsRatio, type="scatter", col="red3", 
             ylab='Odds Ratio',
             ylim=c(0,150)))

par(new = T)
with(cancerData, plot(cancers, foldIncrease, pch=16, axes=F, xlab=NA, ylab=NA, cex=1.2))
axis(side = 4)
mtext(side = 4, line = 3, 'Fold Increase')
为了澄清这一点,我正在寻找:


这就是你想要的吗?(注意,我使用了
ggplot2
而不是
base

库(tidyverse)
整洁的%
收集(统计数据,val,-癌症)
ggplot(tidy,aes(cancers,val))+
几何图形栏(aes(fill=stats),stat=“identity”,position=“dodge”)

编辑 好吧,一般来说我认为这不是个好主意。看看原因。但是如果你真的想,下面的内容可以帮你

vars <- length(unique(cancerData$cancer))

par(mar = c(4, 4, 4, 6))
plot(1:vars, seq(0, 120, length = vars), 
    type = "n",
    main = "Odds Ratios and Fold Increase",
    bty = "n",
    xaxt = "n",
    xlab = "Cancers",
    ylab = "Odds Ratios")
rect(1:vars - 0.25, 0, 1:vars, cancerData$oddsRatio, col = "blue")
axis(1, at = 1:vars, labels = unique(cancerData$cancer))

par(new = TRUE)
plot(1:vars, seq(0, 5, length = vars), 
    type = "n", 
    xaxt = "n", 
    yaxt = "n",
    bty = "n",
    xlab = "",
    ylab = "")
rect(1:vars, 0, 1:vars + 0.25, cancerData$foldIncrease, col = "red")
axis(4)
mtext("Fold Increase", side = 4, line = 3)
legend("topright", 
    fill = c("blue", "red"), 
    legend = c("Odds Ratio", "Fold Increase"),
    box.lwd = 0)

vars这就是你想要的吗?(注意,我使用了
ggplot2
而不是
base

库(tidyverse)
整洁的%
收集(统计数据,val,-癌症)
ggplot(tidy,aes(cancers,val))+
几何图形栏(aes(fill=stats),stat=“identity”,position=“dodge”)

编辑 好吧,一般来说我认为这不是个好主意。看看原因。但是如果你真的想,下面的内容可以帮你

vars <- length(unique(cancerData$cancer))

par(mar = c(4, 4, 4, 6))
plot(1:vars, seq(0, 120, length = vars), 
    type = "n",
    main = "Odds Ratios and Fold Increase",
    bty = "n",
    xaxt = "n",
    xlab = "Cancers",
    ylab = "Odds Ratios")
rect(1:vars - 0.25, 0, 1:vars, cancerData$oddsRatio, col = "blue")
axis(1, at = 1:vars, labels = unique(cancerData$cancer))

par(new = TRUE)
plot(1:vars, seq(0, 5, length = vars), 
    type = "n", 
    xaxt = "n", 
    yaxt = "n",
    bty = "n",
    xlab = "",
    ylab = "")
rect(1:vars, 0, 1:vars + 0.25, cancerData$foldIncrease, col = "red")
axis(4)
mtext("Fold Increase", side = 4, line = 3)
legend("topright", 
    fill = c("blue", "red"), 
    legend = c("Odds Ratio", "Fold Increase"),
    box.lwd = 0)

vars它很近,但最大的变化是我想要两个y轴,所以我想能够在它自己的轴上绘制褶皱增加,这样条就不会那么小。它很近,但最大的变化是我想要两个y轴,所以我想能够在它自己的轴上绘制褶皱增加,这样条就不会那么小了。