小编mts*_*mts的帖子

geom_bar定义具有不同填充颜色的边框颜色

我想画一个条形图geom_bar,我想要一个黑色边框包围的独特填充颜色.然而,该指令color="black"并不像我希望的那样被解释为"黑色"而且我得到了红色边框.

library(ggplot2)
test=as.data.frame(cbind(a=c(1,1,2,3), b=1:4, c=as.character(1:4)))
ggplot(test) + geom_bar(aes(x=a, y=b, fill=c, colour="black"), stat="identity")
Run Code Online (Sandbox Code Playgroud)

我如何正确使用,geom_bar以便它给我正确的黑色边框?

r ggplot2

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

ggplot2:单个图例中包含单个图例的多个图表

我想要两个情节+他们的传奇的组合情节如下:

library(ggplot2) 
library(grid)
library(gridExtra)
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]    
p1 <- qplot(price, carat, data=dsamp, colour=clarity)
p2 <- qplot(price, depth, data=dsamp, colour=clarity)
g <- ggplotGrob(p1 + theme(legend.position="bottom"))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
grid.arrange(arrangeGrob(p1+theme(legend.position="right"),p2+theme(legend.position="none"),legend,ncol=3,widths=c(3/7,3/7,1/7)))
Run Code Online (Sandbox Code Playgroud)

预期产出

但是我不想猜测图和图例的宽度(并指定ncol)但是从中提取p1p2 如此处所示.

所以我希望我需要这样的东西(来自链接的改编代码):

grid_arrange_shared_legend_row <- function(...) {
  plots <- list(...)
  g <- ggplotGrob(plots[[1]] + theme(legend.position="right"))$grobs
  legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
  lwidth <- sum(legend$width)
  grid.arrange(
    do.call(arrangeGrob, lapply(plots, function(x)
      x + theme(legend.position="none"))),
    legend,
    ncol = length(plots)+1,
    widths = unit.c(rep(unit(1, "npc") …
Run Code Online (Sandbox Code Playgroud)

plot r ggplot2 gridextra

9
推荐指数
1
解决办法
2749
查看次数

ggplot2:手动添加图例

如何将任何(不相关的)图例映射到现有的ggplot?

免责声明:请不要恨我.我知道使用'ggplot2'创建图例的最佳方法是正确地映射您的数据,我99%的时间都这样做.然而,我要求的东西通常可以给我任何我想要的传奇.

作为一个例子,我有一个看起来像这样的情节: 在此输入图像描述

从这段代码创建:

set.seed(42)
temp1 = cbind.data.frame(begin = rnorm(10, 0, 1), end = rnorm(10, 2, 1), y1 = 1:10, y2 = 1:10, id = as.character(1:10))
temp2 = cbind.data.frame(x = 0:2, y = 1:3*2)
temp3 = cbind.data.frame(x = seq(0.5, 1.5, 0.33))
temp = c()
plot1 = ggplot(data = temp, aes(x = x)) + 
  geom_vline(data = temp3, aes(xintercept = x), color = "red", linetype = "longdash") + 
  geom_segment(data = temp1, aes(y = y1, yend = y2, x = begin, …
Run Code Online (Sandbox Code Playgroud)

r legend ggplot2

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

如何在没有屏幕或tmux的情况下重新连接到意外断开的ssh会话

我知道这些问题多年来一直被问到,而答案往往是screen或者tmux.screen如果我知道我将离开会话很长时间,或者网络太糟糕而无法保持可靠的连接,我肯定会在开始时使用.

主要的问题是,当我开始一些会话并发现它必须持续很长时间,或者连接只是意外丢失.在后一种情况下,通常当我立即开始另一个会话时,我可以发现之前的进程没有被杀死,但我无法重新连接到他们的终端.

所以我想知道在意外断开ssh会话后很长时间内是否有可能阻止正常进程被杀死.最重要的是我可以重新连接到他们的终端,而不是screen提前启动它们.

如果没有,是否可以将已经启动的裸ssh会话移动到新screen会话中以便以后重新连接?

ssh session gnu-screen reconnect tmux

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

使用混合数字和分类数据进行无监督异常检测

整个夏天我正在从事一个数据分析项目。主要目标是利用医院中有关用户访问患者信息的一些访问日志数据,并尝试检测异常访问行为。选择了几个属性来描述用户(例如员工角色、部门、邮政编码)和患者(例如年龄、性别、邮政编码)。大约有 13 - 15 个变量正在考虑中。

我之前用的是R,现在用的是Python。我可以根据你们建议的任何合适的工具/库来使用。

在我提出任何问题之前,我确实想提一下,根据医疗保健行业保护个人信息的要求,许多数据字段在交给我时都经过了匿名化处理。具体来说,许多 VARCHAR 值被转换为随机整数值,仅维护整个数据集的引用完整性。

问题:

  • 没有给出异常值的确切定义(它是根据大多数数据的行为定义的,如果存在一般行为),并且没有标记的训练集告诉我数据集的哪些行被认为是异常的。我相信该项目属于无监督学习领域,所以我正在研究聚类。

    由于数据是混合的(数字和分类),我不确定聚类如何处理这种类型的数据。

    我读到可以扩展分类数据并让变量中的每个类别为 0 或 1 以便进行聚类,但是 R/Python 如何为我处理如此高维的数据呢?(仅仅扩大雇主角色就会带来约 100 个以上的变量)


  • 如何解释聚类的结果?

    使用聚类算法,潜在的“异常值”是否也会被分组为聚类?我该如何检测它们?

    另外,涉及分类数据时,我不确定如何定义“点之间的距离”,数据点的接近度是否表明类似的行为?将每个类别扩展到具有真/假值的虚拟列是否有帮助?那距离是多少呢?


  • 面对聚类分析的挑战,我也开始尝试对数据进行切片,一次只查看两个变量。例如,我会查看某个员工角色访问的患者的年龄范围,并使用四分位数和四分位数范围来定义异常值。对于分类变量,例如员工角色和触发的事件类型,我只会查看每个事件被触发的频率。

    有人可以向我解释对非正态分布的数据使用四分位数的问题吗?对此有何补救措施?


  • 最后,您会建议这两种方法(或其他一些方法)中的哪一种?使用这种方法的最佳方法是什么?多谢。

cluster-analysis data-mining data-analysis

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

Rcpp将长度为0(NULL)的向量传递给cppfunction

我有一个cppFunction矢量ints作为输入,例如:

library(Rcpp)
cppFunction('double test2(NumericVector ints) {
            return 42;
            }')
Run Code Online (Sandbox Code Playgroud)

如果传递长度至少为1的向量,则输出正确:

> test2(1)
[1] 42
> test2(1:10)
[1] 42
Run Code Online (Sandbox Code Playgroud)

对于长度为0的输入,我得到:

> test2(c())
Error: not compatible with requested type
Run Code Online (Sandbox Code Playgroud)

有没有办法将长度为0或更大的向量传递给我的函数?即我的预期输出是:

> test2_expectedoutput(c())
[1] 42
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过首先检入R并调用函数的不同版本来控制R,但是我想避免这种情况.我希望有一些简单的解决方案,因为在cpp内我也可以有一个NumericVector长度为0,如果我正确理解是什么NumericVector zero;.唯一相关的问题我能找到的这个关于如何从RCPP功能R内部返回NULL对象.

r rcpp

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

R中行的setdiff

对于两个数据帧df.1df.2,我想知道其中的行df.1不在 中df.2,即已消失或更改的行。这是示例:

df.1 = cbind.data.frame(a = 1:4, b = 2:5, c = 99:102)
> df.1
  a b   c
1 1 2  99
2 2 3 100
3 3 4 101
4 4 5 102

df.2 = cbind.data.frame(a = c(1:3,7), b = c(3,3:4,9), c=c(99:100, 102, 105))
> df.2
  a b   c
1 1 3  99
2 2 3 100
3 3 4 102
4 7 9 105
Run Code Online (Sandbox Code Playgroud)

所以这里我想要的输出是第 1,3 行和第 4 行df.1 …

r

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

ggplot2:有两个映射的一个图例

我正在做一个有两个不同映射的绘图("group"映射到颜色和linetype,"to"映射到shape).我想将这两个映射组合在一个图例中,但无法在图例中获得正确的形状.
这是我的尝试:

set.seed(123)
plotdata = cbind.data.frame(x = rep(1:5, times = 4), 
                            y = rnorm(20), 
                            from = rep(c("1","2"), each = 10),
                            to = rep(c("1","2"), times= 10))
plotdata = cbind.data.frame(plotdata, group = paste0(plotdata$from, "to", plotdata$to))

library(ggplot2)

plot1 = ggplot(plotdata, aes(x = x, y = y, group = group, color = group, lty = group, shape = to)) +
  geom_point() + geom_line() + theme_bw() + 
  scale_color_discrete(name = "", 
                       breaks = c("1to1", "1to2", "2to1", "2to2"), 
                       labels = c("1to1", "1to2", "2to1", "2to2")) +
  scale_linetype_discrete(name = …
Run Code Online (Sandbox Code Playgroud)

r ggplot2

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

如何在ggplot2 R图中精确设置轴的极限?

用ggplot制作一个情节,我希望准确设置我的轴.我知道我可以设置绘图范围(例如,对于x轴我指定的限制从2到4),coord_cartesian()但是在我指定的范围的左侧和右侧留下一点空间:

在此输入图像描述

以上MWE的代码:

library(ggplot2)

data.mwe = cbind.data.frame(x = 1:5, y = 2:6)

plot.mwe = ggplot(data = data.mwe, aes(x=x,y=y)) + geom_line() + coord_cartesian(xlim = c(2,4))
print(plot.mwe)
Run Code Online (Sandbox Code Playgroud)

我想要的结果是一个图表,其中显示的区域正好在我指定的限制之间.

我知道 如何在ggplot2 R图中设置轴的限制? 但它没有回答我的问题,因为它产生了上面不希望的结果,或者削减了观察结果(带有limits参数scale_x_continuous).我知道我可以修改设置较小的限制范围,但我正在寻找一个干净的结果.至少我想知道实际范围与我指定的范围有多大,以便我可以相应地调整我的限制.

plot r ggplot2

2
推荐指数
1
解决办法
156
查看次数

在矢量不同长度的滚动总和

说我有一个矢量:

vec = 1:10
vec
[1]  1  2  3  4  5  6  7  8  9 10
Run Code Online (Sandbox Code Playgroud)

对于不同的整数,k我想要我的向量的k个连续元素的总和,即我对k = 1的期望输出是向量本身

[1]  1  2  3  4  5  6  7  8  9 10
Run Code Online (Sandbox Code Playgroud)

并且对于k = 2:

[1]  3  5  7  9  11  13  15  17  19
Run Code Online (Sandbox Code Playgroud)

等等 - 在这个例子中,k = 10是我想要的最后一个:

[1] 55
Run Code Online (Sandbox Code Playgroud)

即我向量的所有10个条目的总和.

在我的实际数据vec中,长度约为10 ^ 6,k=1:1000条目是带符号的实数.

编辑:我对性能很好奇所以我做了我的第一个基准:

> library(RcppRoll)
> library(zoo)
> library(microbenchmark)
> 
> f <- Vectorize(function(x, k)RcppRoll::roll_sum(x, k),  vectorize.args = "k")
> out = …
Run Code Online (Sandbox Code Playgroud)

r

0
推荐指数
1
解决办法
349
查看次数