gpt4 book ai didi

r - 使用条形图可视化与目标值的差异

转载 作者:行者123 更新时间:2023-12-04 10:45:43 27 4
gpt4 key购买 nike

我正在尝试使用 R 的 gglot2 包中的条形图来可视化时间序列与其基线值的偏移量。例如,采用以下合成数据:

baseline = 400
steps <- sample(0:10,50,replace=TRUE) - sample(0:10,50,replace=TRUE)
value <- cumsum(steps) + baseline
time = 1:50
data <- data.frame(time,value)

print(value)
[1] 400 400 397 397 393 400 394 395 389 389 385 395 400 399 405 403 399 401 399 401
[21] 401 401 398 397 395 395 401 402 393 400 399 398 406 412 417 413 410 401 400 399
[41] 394 401 406 406 401 404 411 413 404 402

我可以按原始比例绘制图表,但这并不能提供真正的信息:

longdata <- ddply( data, "value", transform, posneg=sign(value-baseline) )
longdata[longdata$posneg == 0,'posneg'] <- 1
p_aes <- aes( time, value, fill=factor(posneg))
p_scale <- scale_fill_brewer( palette='Set1', guide=FALSE )
p_geom <- geom_bar( stat='identity', position='identity' )
ggplot(longdata) + p_aes + p_scale + p_geom

enter image description here

通过沿 y 轴移动美学(即 y = 值 - 基线),我得到了我想要显示的图表,这很好而且很容易。

longdata <- ddply( data, "value", transform, posneg=sign(value-baseline) )
longdata[longdata$posneg == 0,'posneg'] <- 1
p_aes <- aes( time, value-baseline, fill=factor(posneg))
p_scale <- scale_fill_brewer( palette='Set1', guide=FALSE )
p_geom <- geom_bar( stat='identity', position='identity' )
ggplot(longdata) + p_aes + p_scale + p_geom

enter image description here

不幸的是,y 轴的比例现在更改为与基线的偏移量,即“值 - 基线”。但是,我确实希望 y 轴保持原始值(380 到 420 之间的值)。

有什么方法可以保留第二张图表的原始 y 轴刻度?对于可视化与目标值的差异,您还有其他建议吗?

最佳答案

添加功能:

yaxis_format <- function(x){
lab <- 400-x
}

然后使用scale_y_continuous(label = yaxis_format)处理标签:

ggplot(longdata) + p_aes + p_scale + p_geom + scale_y_continuous(label=yaxis_format)

最终的代码和图表应该是这样的:

library(ggplot2)
library(plyr)

set.seed(201)

baseline = 400
steps <- sample(0:10,50,replace=TRUE) - sample(0:10,50,replace=TRUE)
value <- cumsum(steps) + baseline
time = 1:50
data <- data.frame(time,value)

yaxis_format <- function(x){
lab <- 400-x
}

longdata <- ddply( data, "value", transform, posneg=sign(value-baseline) )
longdata[longdata$posneg == 0,'posneg'] <- 1
p_aes <- aes( time, value-baseline, fill=factor(posneg))
p_scale <- scale_fill_brewer( palette='Set1', guide=FALSE )
p_geom <- geom_bar( stat='identity', position='identity' )
ggplot(longdata) + p_aes + p_scale + p_geom + scale_y_continuous(label=yaxis_format)
+ ylab("Value")

enter image description here

现在,一切就绪后,请注意比例尺是奇数。改用 scale_y_reverse 来修复它:

ggplot(longdata) + p_aes + p_scale + p_geom + scale_y_reverse(label=yaxis_format)
+ ylab("Value")

enter image description here

关于r - 使用条形图可视化与目标值的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27320150/

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