从基础 R 图转换为 ggplot
Transform from base R plot to ggplot
我有一个基于 R 的绘图,我一直在尝试将其转换为 ggplot,但不知道该怎么做。
我不确定如何执行此操作,因为通常对于 ggplot,我们创建一个数据框并插入我们想要在列中绘制的数据。在下图中,yaxis 和 points 是不同的数据。
## load data
dogs <- read.table("http://www.stat.columbia.edu/~gelman/arm/examples/dogs/dogs.dat", skip = 2)
## some basic transformations & naming
dogsWide <- as.matrix(dogs[,2:ncol(dogs)])
dogsWide <- ifelse(dogsWide=="S",1,0)
dogsWide <- cbind(dogs[,1], dogsWide)
colnames(dogsWide) <- c("dog",paste0("t",0:24))
## order dogs by last shock
o <- order(apply(dogsWide[,2:ncol(dogsWide)], 1, function(x) max(which(x==1))))
## color shocks
colors <- adjustcolor(c("lightblue", "coral2"), alpha.f=.75)
plot(x = 0:26, y = rep(31,27), col = "white", ylim = c(0,31),
ylab = "dog", xlab = "trial nr",
main = "learning trajectory for each dog")
for(j in 1:nrow(dogsWide)){
points(1:25,rep(j,25), pch = 20, cex = 2,
col = colors[dogsWide[o[j],2:ncol(dogsWide)]+1])
}
这returns一个情节如下。
library(tidyverse)
dogs <- read.table("http://www.stat.columbia.edu/~gelman/arm/examples/dogs/dogs.dat", skip = 2)
dogsLong <- dogs %>%
rename(dog = V1) %>%
pivot_longer(-dog, names_to = 'trial', values_to = 'shock') %>%
mutate(
trial = parse_number(trial),
shock = shock == 'S'
) %>%
group_by(dog) %>%
mutate(last_shock = max(which(shock))) %>%
ungroup() %>%
mutate(dog = as.numeric(fct_reorder(factor(dog), last_shock)))
ggplot(dogsLong, aes(trial, dog, color = shock)) +
geom_point(size = 4, alpha = 0.75) +
scale_color_manual(
name = NULL,
values = c("lightblue", "coral2"),
labels = c('no shock', 'shock')
) +
coord_equal() +
theme_classic() +
labs(
x = 'trial nr',
title = 'learning trajectory for each dog'
)
我有一个基于 R 的绘图,我一直在尝试将其转换为 ggplot,但不知道该怎么做。
我不确定如何执行此操作,因为通常对于 ggplot,我们创建一个数据框并插入我们想要在列中绘制的数据。在下图中,yaxis 和 points 是不同的数据。
## load data
dogs <- read.table("http://www.stat.columbia.edu/~gelman/arm/examples/dogs/dogs.dat", skip = 2)
## some basic transformations & naming
dogsWide <- as.matrix(dogs[,2:ncol(dogs)])
dogsWide <- ifelse(dogsWide=="S",1,0)
dogsWide <- cbind(dogs[,1], dogsWide)
colnames(dogsWide) <- c("dog",paste0("t",0:24))
## order dogs by last shock
o <- order(apply(dogsWide[,2:ncol(dogsWide)], 1, function(x) max(which(x==1))))
## color shocks
colors <- adjustcolor(c("lightblue", "coral2"), alpha.f=.75)
plot(x = 0:26, y = rep(31,27), col = "white", ylim = c(0,31),
ylab = "dog", xlab = "trial nr",
main = "learning trajectory for each dog")
for(j in 1:nrow(dogsWide)){
points(1:25,rep(j,25), pch = 20, cex = 2,
col = colors[dogsWide[o[j],2:ncol(dogsWide)]+1])
}
这returns一个情节如下。
library(tidyverse)
dogs <- read.table("http://www.stat.columbia.edu/~gelman/arm/examples/dogs/dogs.dat", skip = 2)
dogsLong <- dogs %>%
rename(dog = V1) %>%
pivot_longer(-dog, names_to = 'trial', values_to = 'shock') %>%
mutate(
trial = parse_number(trial),
shock = shock == 'S'
) %>%
group_by(dog) %>%
mutate(last_shock = max(which(shock))) %>%
ungroup() %>%
mutate(dog = as.numeric(fct_reorder(factor(dog), last_shock)))
ggplot(dogsLong, aes(trial, dog, color = shock)) +
geom_point(size = 4, alpha = 0.75) +
scale_color_manual(
name = NULL,
values = c("lightblue", "coral2"),
labels = c('no shock', 'shock')
) +
coord_equal() +
theme_classic() +
labs(
x = 'trial nr',
title = 'learning trajectory for each dog'
)