gpt4 book ai didi

r - 带有 2 个变量、2 个 y 轴的条形图

转载 作者:行者123 更新时间:2023-12-05 00:00:39 28 4
gpt4 key购买 nike

我有以下数据

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

我想要一个带有 2 y 轴的条形图(一个用于 var.a,一个用于 var.2)。每组(x 轴,1:10)应该有 2 个彼此相邻的条形,一个用于 var.a,一个用于 var.b。

由于 var.a 和 var.b 的数量级不同,我无法使用一个 y 轴

这可能与基础 R 吗?

谢谢

最佳答案

使用 graphics 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")

然后使用 barplot() 绘制绘图没有轴:
barplot(t(as.matrix(test[, c("var.a.prop", "var.b.prop")])), beside = TRUE,
yaxt = "n", names.arg = test$group)

然后使用标签的原始值范围( labels 参数)和比例值范围添加左侧和右侧的轴以将标签放置在轴上( at 参数)(这部分不漂亮,但它完成了工作):
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))

(抱歉没有图片)

编辑:

稍微获取轴 pretty呃,
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)

关于r - 带有 2 个变量、2 个 y 轴的条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852270/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com