规范化系列以在ggplot2中绘图

问题描述 投票:2回答:2

我有一个我想绘制的数据框,由以下代码生成。

df_rn1 = as.data.frame(cbind(rnorm(40, 1, 1), rep("rn1", 40)))
df_rn2 = as.data.frame(cbind(rnorm(40, 10, 1), rep("rn2", 40)))
df_rn3 = as.data.frame(cbind(rnorm(40, 100, 1), rep("rn3", 40)))

df_test = rbind(df_rn1, df_rn2, df_rn3)
colnames(df_test) <- c("value", "type")

我想绘制由相应的第一个观察s.t.归一化的数据帧。他们缩放得当。但是,我没有比这更进一步:

ggplot(aes(x = rep(1:40, 3), y=as.numeric(as.character(value)), color = type), data = df_test) +
      geom_line()

是否可以直接在ggplot代码中按类型进行规范化?

谢谢

r ggplot2
2个回答
2
投票

这个怎么样?

library(tidyverse);
df_test %>%
    group_by(type) %>%
    mutate(
        value = as.numeric(as.character(value)),
        value.scaled = (value - mean(value)) / sd(value),
        idx = 1:n()) %>%
    ggplot(aes(idx, value.scaled, colour = type)) + geom_line()

enter image description here

请注意,值在type内缩放;不确定你要追求什么,对于全球扩展,请参阅@ManishSaraswat的回答。


1
投票

您可以使用scale函数来规范化值。

df_test %>% 
    mutate(value = scale(value)) %>% 
    ggplot(aes(x = rep(1:40, 3), y = value, color=type))+
    geom_line()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.