R 带2个变量、2个y轴的条形图

R 带2个变量、2个y轴的条形图,r,graph,plot,R,Graph,Plot,我有以下数据 test<-data.frame(group=1:10, var.a=rnorm(n=10,mean=500,sd=20), var.b=runif(10)) test要使用R中的图形包,可以创建新变量,将var.a和var.b中的值转换为相应变量中最大值的比例: test <- data.frame(group = 1:10, var.a = rnorm(n = 10, mean = 500, sd = 20), var.b = runif(10)) funP

我有以下数据

test<-data.frame(group=1:10, var.a=rnorm(n=10,mean=500,sd=20), var.b=runif(10))

test要使用R中的
图形
包,可以创建新变量,将
var.a
var.b
中的值转换为相应变量中最大值的比例:

test <- data.frame(group = 1:10, var.a = rnorm(n = 10, mean = 500, sd = 20),
  var.b = runif(10))

funProp <- function(testCol) {
    test[, testCol]/max(test[, testCol])
}

test$var.a.prop <- funProp("var.a")
test$var.b.prop <- funProp("var.b")
然后使用标签的原始值范围(参数
labels
和比例值范围)在左侧和右侧添加轴,以将标签放置在轴上(参数
at
)(这部分并不漂亮,但它完成了工作):

(很抱歉没有图像)

编辑:

要使轴有点漂亮

myLeftAxisLabs <- pretty(seq(0, max(test$var.a), length.out = 10))
myRightAxisLabs <- pretty(seq(0, max(test$var.b), length.out = 10))

myLeftAxisAt <- myLeftAxisLabs/max(test$var.a)
myRightAxisAt <- myRightAxisLabs/max(test$var.b)

barplot(t(as.matrix(test[, c("var.a.prop", "var.b.prop")])),
  beside = TRUE, yaxt = "n", names.arg = test$group,
  ylim=c(0, max(c(myLeftAxisAt, myRightAxisAt))))

axis(2, at = myLeftAxisAt, labels = myLeftAxisLabs)

axis(4, at = myRightAxisAt, labels = myRightAxisLabs)

myleft是一种非常聪明的方法。非常感谢你。有没有办法让轴看起来更漂亮一点?@ECII,请查看上面的编辑以获得更漂亮轴的建议。
axis(2, at = seq(0, max(test$var.a.prop), length.out = 10),
  labels = round(seq(0, max(test$var.a), length.out = 10)))

axis(4, at = seq(0, max(test$var.b.prop), length.out = 10),
  labels = round(seq(0, max(test$var.b), length.out = 10), 2))
myLeftAxisLabs <- pretty(seq(0, max(test$var.a), length.out = 10))
myRightAxisLabs <- pretty(seq(0, max(test$var.b), length.out = 10))

myLeftAxisAt <- myLeftAxisLabs/max(test$var.a)
myRightAxisAt <- myRightAxisLabs/max(test$var.b)

barplot(t(as.matrix(test[, c("var.a.prop", "var.b.prop")])),
  beside = TRUE, yaxt = "n", names.arg = test$group,
  ylim=c(0, max(c(myLeftAxisAt, myRightAxisAt))))

axis(2, at = myLeftAxisAt, labels = myLeftAxisLabs)

axis(4, at = myRightAxisAt, labels = myRightAxisLabs)