用异常值连续缩放GGR图中的y轴

用异常值连续缩放GGR图中的y轴,r,ggplot2,scale,R,Ggplot2,Scale,我有一个关于在R中使用ggplot可视化数据的问题。具体而言,关于异常值情况下y轴的缩放 让我们从一个样本数据集开始,该数据集包含来自31个ID的观察结果。30个ID在预期范围内,有一个异常值: # Load libraries library(tidyverse) library(ggbeeswarm) library(data.table) # Set seed set.seed(123) # Create dataset ID <- sprintf("ID-%s",seq(1:3

我有一个关于在
R
中使用
ggplot
可视化数据的问题。具体而言,关于异常值情况下y轴的缩放

让我们从一个样本数据集开始,该数据集包含来自31个ID的观察结果。30个ID在预期范围内,有一个异常值:

# Load libraries
library(tidyverse)
library(ggbeeswarm)
library(data.table)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
  mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
         `2` = `1` - rnorm(1, mean = 3, sd = 5), 
         `3` = `2` - rnorm(1, mean = 1, sd = 3)) 

# Add outlier
df <- as.data.frame(rbindlist(list(df, list("ID-31", 0.01, 0.02, 0.03 ,1))))

df <- df %>% 
  pivot_longer(-ID) %>% 
  rename(time = name) %>% 
  mutate(time = as.factor(time))

#Plot
ggplot(data = df, aes(x=time, y = value)) + 
  geom_quasirandom() +
  theme_classic() + 
  scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
  labs(x = "Time", y = "Value")
#加载库
图书馆(tidyverse)
图书馆(ggbeeswarm)
库(数据表)
#播种
种子集(123)
#创建数据集
ID我不知道任何关于使用ggplot的y轴断裂的情况,但是如果您可以提前指定哪个ID将是异常值,那么这将实现类似的效果

library(tidyverse)
library(ggbeeswarm)
library(data.table)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
  mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
         `2` = `1` - rnorm(1, mean = 3, sd = 5), 
         `3` = `2` - rnorm(1, mean = 1, sd = 3)) 

# Add outlier
df <- as.data.frame(rbindlist(list(df, list("ID-31", 0.01, 0.02, 0.03 ,1))))

df <- df %>% 
  pivot_longer(-ID) %>% 
  rename(time = name) %>% 
  mutate(time = as.factor(time),
         is_outlier = (as.character(ID) == "ID-31"))

ggplot(data = df, aes(x=time, y = value)) + 
  geom_point() + 
  facet_grid(rows = vars(is_outlier), 
             scales = "free_y",
             switch = "y") +
  theme_classic() + 
  scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
  labs(x = "Time", y = "Value")
库(tidyverse)
图书馆(ggbeeswarm)
库(数据表)
#播种
种子集(123)
#创建数据集
ID我不知道任何关于使用ggplot的y轴断裂的情况,但是如果您可以提前指定哪个ID将是异常值,那么这将实现类似的效果

library(tidyverse)
library(ggbeeswarm)
library(data.table)

# Set seed
set.seed(123)

# Create dataset
ID <- sprintf("ID-%s",seq(1:30))
baseline <- rnorm(30, mean = 50, sd = 3)

df <- data.frame(ID, baseline) %>%
  mutate(`1` = baseline - rnorm(1, mean = 5, sd = 4), 
         `2` = `1` - rnorm(1, mean = 3, sd = 5), 
         `3` = `2` - rnorm(1, mean = 1, sd = 3)) 

# Add outlier
df <- as.data.frame(rbindlist(list(df, list("ID-31", 0.01, 0.02, 0.03 ,1))))

df <- df %>% 
  pivot_longer(-ID) %>% 
  rename(time = name) %>% 
  mutate(time = as.factor(time),
         is_outlier = (as.character(ID) == "ID-31"))

ggplot(data = df, aes(x=time, y = value)) + 
  geom_point() + 
  facet_grid(rows = vars(is_outlier), 
             scales = "free_y",
             switch = "y") +
  theme_classic() + 
  scale_x_discrete(limits = c("baseline", "1", "2", "3") ) +
  labs(x = "Time", y = "Value")
库(tidyverse)
图书馆(ggbeeswarm)
库(数据表)
#播种
种子集(123)
#创建数据集
在这种情况下,ID
coord\u cartesian()
可能比
scale\u y\u continuous()
更可取,但0处的值仍然不可见。使用包放大上限范围可能是一个选项。或
scale\u y\u log10()
。还是两个方面?在这种情况下,
coord\u cartesian()
可能比
scale\u y\u continuous()
更可取,但0处的值仍然不可见。使用包放大上限范围可能是一个选项。或
scale\u y\u log10()
。还是两个方面?或者是一个断裂的轴,这通常是理所当然地被阻止的。