我有一个基于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])
}

This returns a plot as below. enter image description here

推荐答案

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'
  )

enter image description here

R相关问答推荐

从多个前置日期中获取最长日期

基于现有类创建类的打印方法(即,打印tibles更长时间)

随机森林回归:下拉列重要性

获取一个数据库框架的摘要,该数据库框架将包含一列数据库框架,

当两个图层映射到相同的美学时,隐藏一个图层的图例值

传递ggplot2的变量作为函数参数—没有映射级别以正确填充美学

从多个线性回归模型中提取系数

如何识别倒排的行并在R中删除它们?

跨列查找多个时间报告

如何在PDF格式的kableExtra表格中显示管道字符?

按组内中位数分类

使用ifElse语句在ggploy中设置aes y值

访问数据帧中未定义的列时出现R错误

如何在条形图中的x和填充变量中包含多个响应变量?

如何在AER::ivreg中指定仪器?

R-找出存在其他变量的各种大小的所有组合

如何更改包中函数中的参数?

GOGPLATE geom_boxploy色彩疯狂

位置_道奇在geom_point图中不躲避

在R中,如果一个值在同一数据帧中的任何特定列中,如何计算?