小编mar*_*kus的帖子

ggplot2 填充和颜色映射图例

我有一个包含四个变量的示例数据框,我正在尝试将h变量映射到fill并将s变量映射到shape. 由于我的s变量只能采用两个值(“f”或“u”),我想使用geom_point24 和 21,它们可以采用fillcolour参数。

library(ggplot2)
h <- c(1,2,3,4,5)
x <- seq(1:5)
y <- c(1,3,3,5,5)
s <- c(rep('f',3),rep('u',2))
dt <- data.frame(h,x,y,s)
Run Code Online (Sandbox Code Playgroud)

理想情况下,我的geom_point轮廓是黑色的,并且是彩色的fill。我可以用下面的代码绘制它,它会生成这个图:

ggplot(dt, aes(x=y, y=x)) +  
    geom_point(mapping = aes(fill = factor(h), shape = s), size = 5) +
    scale_shape_manual(values = c(24, 21))
Run Code Online (Sandbox Code Playgroud)

由填充控制的颜色

我无法让图例显示彩色键,因为图例键的颜色映射到colournot fill

geom_point如果我将我的值更改为 19 和 17 并映射我的h变量,我可以拥有彩色图例键colour

ggplot(dt, aes(x=y, y=x)) + …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

4
推荐指数
1
解决办法
2218
查看次数

带有多个键和值的 tidyr::spread()

我认为这已被多次询问,但我找不到合适的词来找到可行的解决方案。

如何spread()基于多个值的多个键的数据框?

一个简化的(我有更多的列要传播,但只有两个键:Idtime给定测量的点)我正在处理的数据如下所示:

df <- data.frame(id = rep(seq(1:10),3), 
                 time = rep(1:3, each=10), 
                 x = rnorm(n=30), 
                 y = rnorm(n=30))

> head(df)
  id time           x           y
1  1    1 -2.62671241  0.01669755
2  2    1 -1.69862885  0.24992634
3  3    1  1.01820778 -1.04754037
4  4    1  0.97561596  0.35216040
5  5    1  0.60367158 -0.78066767
6  6    1 -0.03761868  1.08173157
> tail(df)
   id time           x          y
25  5    3  0.03621258 -1.1134368
26  6    3 -0.25900538  1.6009824
27  7    3  0.13996626 …
Run Code Online (Sandbox Code Playgroud)

r reshape dataframe tidyr

4
推荐指数
2
解决办法
9978
查看次数

将命名列表有效地转换为data.frame

我正在寻找一种有效的方式进行以下转换:

输入示例:

ob <- list(a = 2, b = 3)
Run Code Online (Sandbox Code Playgroud)

预期产量:

  key value
1   a     2
2   b     3
Run Code Online (Sandbox Code Playgroud)

当前(详细)解决方案:

data.frame(key = names(ob), value = unlist(ob, use.names = FALSE))
Run Code Online (Sandbox Code Playgroud)

r list dataframe

4
推荐指数
1
解决办法
69
查看次数

如何只为 pandas 中数据帧的某些列绘制直方图

这是我拥有的数据: 在此处输入图像描述

假设我有一个名为 df 的变量中的数据框,如果我执行 df.hist(),它将为数据框中的每个类别显示一个直方图,但我只想为从类别 1 到类别 1 的每个类别显示一个直方图5. 我该怎么做?

python pandas

4
推荐指数
1
解决办法
7348
查看次数

如何在R列表中递归遍历所有键值对并修改值?

我想根据某些条件递归地修改列表的值。

mylist = list(a = "test1", 
              b = list(bb = "test2", list(bbb = "test1")), 
              c = "test2")
Run Code Online (Sandbox Code Playgroud)

我想修改值为test1的值,并将其替换在此列表中或创建一个新列表。例如,如果修改是将test1替换为best1,则结果列表应为

mylist = list(a = "best1", 
              b = list(bb = "test2", list(bbb = "best1")), 
              c = "test2")
Run Code Online (Sandbox Code Playgroud)

在R中最干净的方法是什么?

replace r list

4
推荐指数
1
解决办法
53
查看次数

如何仅显示 geom_smooth 预测的一部分?

我正在尝试绘制一个既涉及geom_point()函数又涉及函数的geom_smooth()图形。

我想geom_smooth()在某个 x 值处裁剪函数,但仅在其所有值都已用于计算平滑曲线之后(即我不想使用xlim(),这将删除用于绘图的值)。

可重现的例子:

library(dplyr)
library(ggplot2)
set.seed(42)
test <- data.frame(replicate(2,sample(0:10,100,rep=TRUE)))
g <- ggplot() + geom_point(data = test, aes(x = X1, y = X2))

t_i <- test
t_i$group <- as.factor(as.numeric(cut(t_i$X1, 25)))
summar_t <- t_i %>% 
   group_by(group) %>% 
   summarise(y_mean=mean(X2),
             y_sd=sd(X2),
             c_mean =mean(X1,na.rm=T),
             n =n()
             )
summar_t$t_2sd <- summar_t$y_mean + summar_t$y_sd*2

g2 <- g + geom_smooth(data = summar_t, aes(x=c_mean, y = t_2sd), se=FALSE, method = lm, formula=y~poly(x,2), color = "black", linetype=3)
Run Code Online (Sandbox Code Playgroud)

当前图像 想要的图片

r ggplot2

4
推荐指数
1
解决办法
320
查看次数

包含特定列名的数据框子集列表

我有一个数据框列表,我想x从每个数据框中获取列作为字符串。

testing <- list(data.frame(A = "Yes", B = "No"),
                data.frame(B = "No", C = "No"),
                data.frame(A = "Yes"))
Run Code Online (Sandbox Code Playgroud)

我可以打印哪些数据帧中有colnameA,但我无法连接到子集原始测试

lapply(testing, function(x) "A" %in% colnames(x))
Run Code Online (Sandbox Code Playgroud)

期望输出

[[1]]
    A  B
1 Yes No

[[2]]
    A
1 Yes
Run Code Online (Sandbox Code Playgroud)

r list subset lapply purrr

4
推荐指数
2
解决办法
255
查看次数

R.为什么我的函数忽略1(并且正确地处理任何数字)?

该函数需要计数数和使用频率(输入 - 矢量,输出 - 矩阵).(我知道,我怎么能这样做更容易,但我想了解错误).问题是函数在向量中忽略1.

count_elements <- function(x) {

y <- sort(x)
m <- matrix(, nrow = 2, ncol = length(unique(x)))
a <- 1
for (i in 1:length(sort(x))) {
  if(is.element(y[i], m))  {
  } else { 
    (m[1, a] <- y[i]) & (m[2, a] <- sum(y == y[i])) & (a <- a+1) }
  } 
m
}
Run Code Online (Sandbox Code Playgroud)

示例输入和输出:

在向量中没有1

x <- c(2:10, 2, 3:7, -1)
count_elements(x)
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,]   -1    2    3    4    5 …
Run Code Online (Sandbox Code Playgroud)

r function

3
推荐指数
1
解决办法
78
查看次数

无法将 ggplot 保存为 eps

我已经读过这个这个,但无法使其发挥作用。

vDF <- data.frame(v = rnorm(50,1,40))
g <- ggplot(vDF, aes(x = vDF)) + geom_histogram()
ggsave(g, file="name.eps") 
Run Code Online (Sandbox Code Playgroud)

我不断收到错误消息

grDevices::postscript(..., onefile = FALSE, Horizo​​ntal = FALSE, 中的错误:无法打开文件“name.eps”

为什么我不能完成这个工作?我看到建议说‘嘿,就做...

setEPS()
postscript("whatever.eps")
plot(rnorm(100), main="Hey Some Data")
dev.off()
Run Code Online (Sandbox Code Playgroud)

但我什至无法首先保存原始 .eps 文件。

r ggplot2

3
推荐指数
1
解决办法
8570
查看次数

R:根据行值中的字符串更改列名称

我有一个来自大量 csv 文件的 df 。当前的列名称具有其名称的占位符。有没有办法使每列的名称成为数据的一部分。整个列的字符串将相同。我会手动更改名称,但有 256 列。

开始 df:

   col2          col3       col4     ...
1 version=1    numCh=10   reserved=0
2 version=1    numCh=10   reserved=0
3 version=1    numCh=11   reserved=0
4 version=1    numCh=11   reserved=0
...
Run Code Online (Sandbox Code Playgroud)

所需的输出:

  version    numCh    reserved   ...
1    1        10        0
2    1        10        0
3    1        11        0
4    1        11        0
...
Run Code Online (Sandbox Code Playgroud)

一直在尝试不同的方法,看看其他人是否创造了类似的东西。

r dplyr

3
推荐指数
1
解决办法
241
查看次数

标签 统计

r ×9

ggplot2 ×3

list ×3

dataframe ×2

dplyr ×1

function ×1

lapply ×1

pandas ×1

purrr ×1

python ×1

replace ×1

reshape ×1

subset ×1

tidyr ×1