小编Tje*_*ebo的帖子

如何使用 gganimate 动画让 x 轴跨度移动?

使用 R,我尝试使用 gganimate 制作一个基于 x 轴从左到右显示的折线图。我已经设法做到了这一点,但我还想做的是使scale_x_continuous(limits = c(i-5,i+5)),即在正在显示的点和窗口周围有一个窗口将继续前进,同时揭示下一点。

我尝试了很多方法来实现这一点,包括在带有和不带有 aes() 的scale_x_continuous 中实现某种循环。似乎什么都不起作用。我对 ggplot2 特别是 gganimate 很陌生,但我在网上找不到任何帮助。我有一种感觉,答案可能很简单,但我只是错过了。

有点像这样,但使用 gganimate:

类似的例子,但不是 gganimate

以下是一些可重现的代码,向您大致展示我到目前为止所做的事情。

library(ggplot2)
library(gganimate)
library(gifski)
library(png)


Step  <- c(1:50,1:50)
Name  <- c(rep("A",50), rep("B",50))
Value <- c(runif(50,0,10), runif(50,10,20))
Final <- data.frame(Step, Name, Value)

a <- ggplot(Final, aes(x = Step, y = Value, group = Name, color = factor(Name))) + 
 geom_line(size=1) + 
 geom_point(size = 2) + 
 transition_reveal(Step) + 
 coord_cartesian(clip = 'off') + 
 theme_minimal() +
 theme(plot.margin = margin(5.5, 40, 5.5, 5.5)) +
 theme(legend.position = "none") 

options(gganimate.dev_args …
Run Code Online (Sandbox Code Playgroud)

r ggplot2 gganimate

6
推荐指数
1
解决办法
1564
查看次数

与NA匹配的值-缺少值-使用mutate

我有些卡住。是否有比下面更好的方法将NA视为其中的“实际值”进行值匹配mutate

library(dplyr)

data_foo <- data.frame(A= c(1:2, NA, 4, NA), B = c(1, 3, NA, NA, 4))
Run Code Online (Sandbox Code Playgroud)

不是所需的输出:

data_foo %>% mutate(irr = A==B)

#>    A  B   irr
#> 1  1  1  TRUE
#> 2  2  3 FALSE
#> 3 NA NA    NA
#> 4  4 NA    NA
#> 5 NA  4    NA

data_foo %>% rowwise() %>% mutate(irr = A%in%B)

#> Source: local data frame [5 x 3]
#> Groups: <by row>
#> 
#> # A tibble: 5 x 3 …
Run Code Online (Sandbox Code Playgroud)

r dplyr

6
推荐指数
2
解决办法
78
查看次数

如何填充由直线和曲线创建的几何图形?

我试图用不同的颜色填充下图中的 3 个三角形。

这是图形

data = data.frame(x=c(125), y=c(220)) #this data is just to be able to use gplot to draw figures

ggplot(data, aes(x = x, y = y)) + 
  xlim(0,250) +
  ylim(-250, 0) +
  geom_curve(x = 33, xend = 223, y = -100, yend = -100, curvature = -.65) +
  geom_segment(x=128, xend = 33, y=-208, yend = -100) +
  geom_segment(x=128, xend = 223, y=-208, yend = -100) +
  geom_segment(x=128, xend = 159.67, y=-208, yend = -45) +
  geom_segment(x=128, xend = 96.33, …
Run Code Online (Sandbox Code Playgroud)

r fill ggplot2

6
推荐指数
2
解决办法
421
查看次数

仅从 data.frame 中的某些选定列返回包含最大值的列的名称

我想获取(在 data.table 的新列中)包含 data.frame 中仅几列中的最大值的列的列名。

这是一个示例 data.frame

# creating the vectors then the data frame ------
id = c("a", "b", "c", "d")
 ignore = c(1000,1000, 1000, 1000) 
 s1 = c(0,0,0,100)
s2 = c(100,0,0,0)
s3 = c(0,0,50,0)
s4 = c(50,0,50,0)
 df1 <- data.frame(id,ignore,s1,s2,s3,s4)  
Run Code Online (Sandbox Code Playgroud)

(1) 现在我想从 s1-s4 列中找到每行中最大数字的列名。(即忽略名为“忽略”的列)

(2) 如果最大值并列,我希望返回最后一个(例如 s4)列名。

(3) 作为一个额外的好处 - 如果都是 0,我希望 NA 返回

这是我迄今为止最好的尝试

df2 <- cbind(df1,do.call(rbind,apply(df1,1,function(x) {data.frame(max.col.name=names(df1)[which.max(x)],stringsAsFactors=FALSE)})))
Run Code Online (Sandbox Code Playgroud)

这在每种情况下都会返回忽略,并且(b 行除外)如果我删除此列,并将 s1-s4 列重新排序为 s4-s1,则有效。

你会如何处理这个问题?

确实非常感谢。

r dataframe

5
推荐指数
1
解决办法
1801
查看次数

R lapply():将列表中所有数据框中的所有列更改为数字,然后将所有值转换为百分比

题:

我对如何为数据框列表中的列批量处理 as.numeric() (或任何其他函数)感到有些困惑。

我知道我可以使用以下方法查看此列表中的特定数据框或列:

> my.list[[1]] 
# or columns within this data frame using:
> my.list[[1]][1]
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将其应用于 lapply() 函数以将所有数据从整数更改为数字时,我的麻烦就来了。

# Example of what I am trying to do
> my.list[[each data frame in list]][each column in data frame] <- 
as.numberic(my.list[[each data frame in list]][each column in data frame])
Run Code Online (Sandbox Code Playgroud)

如果您能以任何方式帮助我,或者知道任何可以帮助我的资源,我将不胜感激。

背景:

我的数据框的结构如下例所示,其中我有 5 种栖息地类型以及有关单个物种家庭范围扩展到n 的面积的信息:

# Example data
spp.1.data <- data.frame(Habitat.A = c(100,45,0,9,0), Habitat.B =  c(0,0,203,45,89), Habitat.C = c(80,22,8,9,20), Habitat.D = c(8,59,77,83,69), Habitat.E = c(23,15,99,0,10))
Run Code Online (Sandbox Code Playgroud)

我有多个具有上述结构的数据框,它们已分配给列表对象:

all.spp.data <- …
Run Code Online (Sandbox Code Playgroud)

r lapply

5
推荐指数
1
解决办法
2819
查看次数

将字母显示为 geom_text 图例的关键字形而不是默认的“a”

我正在使用 geom_raster 和 geom_text 在我的情节中的每个彩色矩形上放置一个字母。我也希望这封信出现在图例中的颜色框顶部,但不知道如何。

我尝试添加show.legend=TRUEgeom_text,但这会导致每个图例键中的字母“a”,而不是所需的字符。

所需的结果如下所示:

想要的结果

这是重现基本情节的代码:

library(tidyverse)
d <-tribble(
    ~a, ~b, ~c,
    "a", "l", "A",
    "a", "r", "F",
    "b", "l", "Q",
    "b", "r", "R"
)

ggplot(data=d, aes(x=a, y=b, fill=c)) +
    geom_raster(na.rm=TRUE) +
    geom_text(aes(label=c), size=3, na.rm=TRUE) 
Run Code Online (Sandbox Code Playgroud)

和输出:

没有所需标签的示例

这可能与此问题有关:https://github.com/tidyverse/ggplot2/issues/2004,但也许有解决方法?

r legend ggplot2

5
推荐指数
1
解决办法
700
查看次数

如何在ggplot2 R中向轴添加子文本

对于主y轴和x轴,我有通用标题,如"Tank's Ratio"和"Counts".我想要第二行标签,我指定比率和计数.例如.就在"Tank's Ratio"之下,我希望"#in water /#in sand"中的字体较小,但是沿着y轴.类似地,对于x轴.这是基本代码

data <- data.frame(set = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4), density = c(1, 3, 3, 1, 3, 1, 1, 1, 3, 3, 1, 3), counts = c(100, 2, 3, 76, 33, 12, 44, 13, 54, 36, 65, 1), ratio = c(1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 90, 1))

library(ggplot2)

ggplot(data, aes(x = counts, y = ratio)) + 
  geom_point() + 
  ylab("Tank's Ratio") + 
  xlab("Counts") 
Run Code Online (Sandbox Code Playgroud)

r axes subtitle ggplot2

5
推荐指数
1
解决办法
224
查看次数

逐行测试多个(并非所有)列是否相等

我想按行检查多列是否全部相等。我想出了一种复杂的方法来计算每组每个值的出现次数。但这似乎有些……麻烦。

样本数据

sample_df <- data.frame(id = letters[1:6], group = rep(c('r','l'),3), stringsAsFactors = FALSE)
set.seed(4)
for(i in 3:5) {
  sample_df[i] <-  sample(1:4, 6, replace = TRUE)
  sample_df
}
Run Code Online (Sandbox Code Playgroud)

期望的输出

library(tidyverse)    
sample_df %>% 
  gather(var, value, V3:V5) %>% 
  mutate(n_var = n_distinct(var)) %>% # get the number of columns
  group_by(id, group, value) %>% 
  mutate(test = n_distinct(var) == n_var ) %>% # check how frequent values occur per "var" 
  spread(var, value) %>%
  select(-n_var)

#> # A tibble: 6 x 6
#> # Groups:   id, group …
Run Code Online (Sandbox Code Playgroud)

r

5
推荐指数
1
解决办法
3076
查看次数

R中ggplot2中多个图例的图例键之间的间距

我通过互联网搜索,但找不到解决我问题的方法。

为了更明确地说,我们有一个带有两个图例的图形,如下所示:

library(ggplot2)

ggplot() + 
  geom_point(data = mtcars, aes(x = disp, y = mpg, color = gear), 
             pch =20, size=18) + 
  geom_line(data = mtcars, aes(x = disp, y = mpg, size = disp/mpg*100)) +
  scale_size(range = c(0,3.5)) +
  guides(size = guide_legend("", order = 1, keywidth = 2, keyheight = 1.5), 
         color = guide_legend("", order = 2, keywidth = 1, keyheight = 1 )) +
  labs(x = "disp", y = "mpg") +
  geom_text(size=2.7, color = "grey29",  vjust=-0.8) +
  theme_bw() 

# ggsave("trial.png", …
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2 legend-properties

5
推荐指数
1
解决办法
157
查看次数

如何使用 ggplot 绘制矩阵

我不想用 ggplot 绘制矩阵。

这是一些示例代码:

# create a dummy matrix
d2 <- matrix(data=NA,nrow=21,ncol=21,dimnames=list(-10:10,-10:10))
sig <- 3;  mx <- 0; my <- 0;
for (jr in as.numeric(dimnames(d2)[[1]])){
  for (jc in as.numeric(dimnames(d2)[[2]])){
    d2[jr+11,jc+11] <- 1/sig/(2*pi)^.5*exp(-((jr-mx)^2+(jc-my)^2)/2/sig^2)
  }
}

# convert it to dataframe
d2.df <- data.frame(x=rep(as.numeric(dimnames(d2)[[1]]),each=ncol(d2)),y=rep(as.numeric(dimnames(d2)[[2]]),times=nrow(d2)),z=as.vector(d2))

# plot with geom_tiles
library(ggplot2)
ggplot(data=d2.df,aes(x=x,y=y,fill=z))+
  geom_tile()
  
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

可以在不将其转换为数据帧的情况下完成此操作吗?

r matrix ggplot2

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

r ×10

ggplot2 ×6

legend ×2

axes ×1

dataframe ×1

dplyr ×1

fill ×1

gganimate ×1

lapply ×1

legend-properties ×1

matrix ×1

subtitle ×1