小编dan*_*dan的帖子

覆盖geom_histogram或stat_bin上的geom_points

我想使用ggplot绘制直方图(或使用的步骤图stat_bin)并使用它覆盖几个点geom_point.

这是一个base实现:

library(plotrix)
set.seed(10)
df <- data.frame(id=LETTERS,val=rnorm(length(LETTERS)))
selected.ids <- sample(LETTERS,3,replace=F)
h <- hist(df$val,plot=F,breaks=10)
cols <- sapply(rainbow(length(selected.ids)),function(x) color.id(x)[1])
selected.df <- data.frame(id=selected.ids,col=cols,stringsAsFactors=F)
selected.df$x <- df$val[which(df$id %in% selected.ids)]
selected.df <- selected.df[order(selected.df$x),]
selected.df$y <- h$counts[findInterval(selected.df$x,h$breaks)]
selected.df$col <- factor(selected.df$col,levels=cols)
plot(h)
segments(x0=selected.df$x,x1=selected.df$x,y0=selected.df$y,y1=selected.df$y,cex=18,lwd=8,col=selected.df$col)
Run Code Online (Sandbox Code Playgroud)

这使:

在此输入图像描述

但是,当我尝试ggplot:

ggplot(df,aes(x=val))+geom_histogram(bins=10,colour="black",alpha=0,fill="#FF6666")+geom_point(data=selected.df,aes(x=x,y=y,colour=factor(col)),size=2)+scale_fill_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")+scale_colour_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")
Run Code Online (Sandbox Code Playgroud)

点和直方图未对齐: 在此输入图像描述

理想情况下,我想使用步骤图绘制它:

ggplot(df,aes(x=val))+stat_bin(geom="step",bins=10)+geom_point(data=selected.df,aes(x=x,y=y,colour=factor(col)),size=2)+scale_fill_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")+scale_colour_manual(values=levels(selected.df$col),labels=selected.df$id,name="id")
Run Code Online (Sandbox Code Playgroud)

这看起来非常像 geom_histogram

在此输入图像描述

而且我也想让线的末端触及y = 0线.

所以我使用stat_bin在步骤图中得到正确的结果?

r ggplot2

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

向可绘制的条形图添加水平线

我正在尝试使用R plotly'sbar type plot 生成一个带有水平布局框的图,并在其背景中添加一条水平线(而不是在它们之上)。此外,我希望这条线在每个方向上对称地延伸一个盒子单元。

这是我在做什么:

plot.df <- data.frame(x = paste0("LONG NAME ",1:6),y = 0.2,width=0.75,group = c("A","B","B","B","C","A"),stringsAsFactors = F)
plot.df$group <- factor(plot.df$group)


plotly::plot_ly(plot.df) %>%
  plotly::add_trace(x=~x,y=~y/2,type='scatter',mode='lines',line=list(color='black'),showlegend=F) %>%
  plotly::add_bars(x=~x,y=~y,width=~width,color=~group) %>%
  plotly::layout(xaxis=list(title=NA,zeroline=F,tickangle=45),yaxis=list(title=NA,zeroline=F,showgrid=F,range=c(0,1),showticklabels=F))
Run Code Online (Sandbox Code Playgroud)

这使:

在此处输入图片说明

我的问题是:

  1. 如何在两个方向上延长线
  2. 如何将线置于背景中,使其不会越过框
  3. 我指定plot.df$y为 0.2 但yaxis范围c(0,1)要使框看起来不像长条。但随后传说就显得太高了。有什么更好的方法可以让方块的图例看起来比现在低?

r bar-chart plotly

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

垂直组合多个条形图

我试图垂直组合条形图,共享它们的x轴。

我想用的Rplotlysubplot的这一点,但运行到一个问题,我希望有人在这里可能有一个解决方案。

以下是具有28个组的示例数据,其中我在每个组中创建了4个系列的条形图,然后尝试使用plotly::subplot以下方法垂直组合它们:

set.seed(1)
df <- data.frame(group = paste0("G",unlist(lapply(1:28,function(i) rep(i,4)))),
                 family = paste0("F",rep(1:4,28)),
                 log2n = log2(as.integer(runif(4*28,0,30))+1),
                 stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)

创建条形图列表:

library(plotly)
library(dplyr)

groups <- unique(df$group)
y.range <- c(0,max(df$log2n))
plot.list <- lapply(1:length(groups),function(g){
  group.df <- dplyr::filter(df,group == groups[g])
  plot_ly(x=group.df$family,y=group.df$log2n,type='bar',name=group.df$family,color=group.df$family,showlegend=(g==length(groups))) %>%
    layout(yaxis=list(range=y.range))
})
Run Code Online (Sandbox Code Playgroud)

如果我尝试:

plotly::subplot(plot.list,shareX=T,nrows=length(plot.list))
Run Code Online (Sandbox Code Playgroud)

我得到: enter image description here

So it seems like some sort of an overflow.

I gradually cut down on the number of plots in plot.list that I run subplot on and when reached 19 …

r bar-chart subplot plotly

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

得到 ggplot2_3.2.0 每组不能绘制多个箱线图的错误

我有xy我想使用R's绘制的数据ggplot

library(dplyr)
library(ggplot2)
set.seed(1)

df <- data.frame(group = unlist(lapply(LETTERS[1:5],function(l) rep(l,5))),
                 x = rep(1:5,5),
                 y = rnorm(25,2,1),
                 y.se = runif(25,0,0.1)) %>%
  dplyr::mutate(y.min = y-3*y.se,
                y.low = y-y.se,
                y.high = y+y.se,
                y.max = y+3*y.se)
Run Code Online (Sandbox Code Playgroud)

如您所见,whiledf$x是一个点 ( integer),df$y有一个相关的错误,我想使用箱线图将其包含在内。

所以我的目的是df按其x坐标绘制每一行,使用y.min, y.low, y, y.high, 并y.max构造 a boxplot, colorand fillit by group。这意味着,我希望将 中的每一行df绘制为box沿单独x-axis位置的 a …

r ggplot2 boxplot

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

快速获取所有矩阵列元素对的产品

假设我有一个数字matrix:

set.seed(1)
mat <- matrix(rnorm(1000), ncol = 100)
Run Code Online (Sandbox Code Playgroud)

我想生成所有向量,这些向量是所有唯一向量对的元素乘积的结果mat.

我们如何改进以下代码:

all.pairs <- t(combn(1:ncol(mat), 2))

res <-
  do.call(cbind,
          lapply(1:nrow(all.pairs),
                 function(p) mat[, all.pairs[p, 1]] * mat[, all.pairs[p, 2]]))
Run Code Online (Sandbox Code Playgroud)

product r matrix

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

从列表中删除重复的元素

我有一个listcharacter vectorS:

my.list <- list(e1 = c("a","b","c","k"),e2 = c("b","d","e"),e3 = c("t","d","g","a","f"))
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个function对于任何character横跨出现不止一次listvectorS(在每vector一个character只能出现一次),将只保留第一次亮相.

因此,此示例的结果列表将是:

res.list <- list(e1 = c("a","b","c","k"),e2 = c("d","e"),e3 = c("t","g","f"))
Run Code Online (Sandbox Code Playgroud)

注意,可以消除整个vector中的list整数,使得结果list中的元素数量不一定必须等于输入list.

redundancy r list

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

使 plotly 注释字体加粗

我想添加annotationscatterR'splotly包生成的绘图中,并以粗体显示文本。

我想:

library(plotly)
library(dplyr)

set.seed(1)
df <- data.frame(x=rnorm(10),y=rnorm(10))
plotly::plot_ly(x =~ df$x, y =~ df$y,marker = list(size=12), type = 'scatter',mode = "markers") %>%
  plotly::add_annotations(text=1:10,showarrow=T,arrowhead=1,x=df$x,y=df$y,font=list(size=10))
Run Code Online (Sandbox Code Playgroud)

这使: 在此处输入图片说明

试图添加face="bold"font规范list

plotly::plot_ly(x =~ df$x, y =~ df$y,marker = list(size=12), type = 'scatter',mode = "markers") %>%
  plotly::add_annotations(text=1:10,showarrow=T,arrowhead=1,x=df$x,y=df$y,font=list(size=10,face="bold"))
Run Code Online (Sandbox Code Playgroud)

并没有真正改变任何东西: 在此处输入图片说明

所以问题是如何让该文本注释以粗体显示。

PS 在我的真实数据中,我想注释点簇,因此注释作为一个单独的层出现。

fonts r plotly

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

在 data.frame 中保留唯一行并聚合非唯一行

我有一个data.frame对于其列的子集来说不是唯一的,我想要做的是获取非唯一列的唯一部分以及相应的聚合(通过collapse)唯一列。

这是一个例子:

library(dplyr)

set.seed(1)
df <- data.frame(v1=rnorm(5), v2=rnorm(5), v3=rnorm(5), id=paste0("id",1:5))

#Replicate a couple of rows adding different ids:
df <- df %>% rbind(df[sample(5,2,replace = F),] %>% dplyr::mutate(id=paste0("id",6:7)))

> df
          v1         v2       v3  id
1 -0.6264538 -0.8204684  1.5117812 id1
2  0.1836433  0.4874291  0.3898432 id2
3 -0.8356286  0.7383247 -0.6212406 id3
4  1.5952808  0.5757814 -2.2146999 id4
5  0.3295078 -0.3053884  1.1249309 id5
6 -0.8356286  0.7383247 -0.6212406 id6
7  0.3295078 -0.3053884  1.1249309 id7
Run Code Online (Sandbox Code Playgroud)

由于复制了第 3 行和第 5 行,结果data.frame将是:

> …
Run Code Online (Sandbox Code Playgroud)

r unique dataframe dplyr tidyr

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

将 numpy float64 稀疏矩阵转换为 Pandas 数据框

我有一个n x n numpy float64 sparse matrix( data, where n = 44),其中行和列是图形节点,值是边权重:

>>> data
<44x44 sparse matrix of type '<class 'numpy.float64'>'
    with 668 stored elements in Compressed Sparse Row format>

>>> type(data)
<class 'scipy.sparse.csr.csr_matrix'>

>>> print(data)
  (0, 7)    0.11793236293516568
  (0, 9)    0.10992000939300195
  (0, 21)   0.7422196678913772
  (0, 23)   0.0630039712667936
  (0, 24)   0.027037442463504143
  (0, 27)   0.16908845414214152
  (0, 28)   0.6109227233402952
  (0, 32)   0.0514765253537568
  (0, 33)   0.016341754080557713
  (1, 6)    0.015070325434709386
  (1, 10)   9.346673769086203e-05
  (1, 11)   0.2471018034781923
  (1, 14)   0.0020684269551621776
  (1, …
Run Code Online (Sandbox Code Playgroud)

python numpy dataframe pandas

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

按组将 data.frame 拆分为向量列表而不是 data.frames 列表

我有一个data.frame将一id列映射到一group列的列,并且该id列不是唯一的,因为它id可以映射到多个groups:

set.seed(1)
df <- data.frame(id = paste0("id", sample(1:10,300,replace = T)), group = c(rep("A",100), rep("B",100), rep("C",100)), stringsAsFactors = F)
Run Code Online (Sandbox Code Playgroud)

我想将其转换data.frame为 a list,其中每个元素都是 each 中的ids group

对于我正在处理的数据大小,这似乎有点慢:

library(dplyr)
df.list <- lapply(unique(df$group), function(g) dplyr::filter(df, group == g)$id)
Run Code Online (Sandbox Code Playgroud)

所以我在想这个:

df.list <- df %>%
  dplyr::group_by(group) %>%
  dplyr::group_split()
Run Code Online (Sandbox Code Playgroud)

假设它比我的第一个选项快,知道如何让它返回与第一个选项相同的输出而不是data.frames列表吗?

split r list dplyr

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

标签 统计

r ×9

plotly ×3

bar-chart ×2

dataframe ×2

dplyr ×2

ggplot2 ×2

list ×2

boxplot ×1

fonts ×1

matrix ×1

numpy ×1

pandas ×1

product ×1

python ×1

redundancy ×1

split ×1

subplot ×1

tidyr ×1

unique ×1