小编Joe*_*ley的帖子

阻止plot_ly重新排序矩阵

我最近更新了R和Rstudio,现在我写的脚本很多都被打破了.

特别是导致我问题的一件事是下面的脚本.以前,用于输出热图正是因为它出现在我给它做矩阵值的CSV.现在,后来的版本似乎改变了他们订购的方式.它现在按升序数字顺序排列列及其标签,这使它们无序.如何防止它重新排列列,或指定它按照我提供的方式处理它们?

次要的美学问题并不是一个问题.

这是代码:

library(ggplot2)
library(plotly)
library(RColorBrewer)
# Read in data
library(readr)


adjwallace <- read.csv() # see the link for the actual data http://pastebin.com/bBLs8uLt


rownames(adjwallace_recluster)[17] <- "Species" #Rename STree
names(adjwallace_recluster)[17] <- "Species"


# Preferences for xaxis
font.pref <- list(
  size = 20,
  family = "Arial, sans-serif",
  color = "black"
)

x.axisSettings <- list(
  title = "",
  zeroline = FALSE,
  showline = FALSE,
  showticklabels = TRUE,
  tickfont = font.pref,
  showgrid = TRUE
)

# Preferences for yaxis
y.axisSettings <- …
Run Code Online (Sandbox Code Playgroud)

r plotly

12
推荐指数
1
解决办法
867
查看次数

这个shell语法的机制:$ {1: - $(</ dev/stdin)}

我最近遇到了这个非常简洁的语法,在创建bash可以接受来自STDIN的参数或流的函数的上下文中(即可以通过管道传递).从表面上看,我理解这里发生了什么,但我想更多地解释一下这是如何工作的实际机制.

这是语法(根据标题): ${1:-$(</dev/stdin)}

在上下文中,可以将其用作:

log(){
 echo -e >&1 "INFO: ${1:-$(</dev/stdin)}"
}
Run Code Online (Sandbox Code Playgroud)

允许以下用法:

$ log foo
INFO: foo
Run Code Online (Sandbox Code Playgroud)

或者,您也可以这样做

mv -v foo.ext bar.ext | log
INFO: renamed 'foo.ext' -> 'bar.ext'
Run Code Online (Sandbox Code Playgroud)

这很棒,因为它是我看到的用于启用参数和管道功能的单一最简洁的方法bash(不幸的是我忘记了我现在遇到它的地方).

现在,我理解(或者我认为我理解),这里发生的大部分事情至少表面上看,但我会更加理解.这是我如何解释它,然后是我剩下的问题:

${1:-$(</dev/stdin)}

  • ${1} 显然是函数接受的默认参数
  • ${1:-x}是否为变量/大括号扩展'后退'到字符串'x',$1否则为空(或未设置?).在这种情况下,回退到STDIN进程子.
  • $()显然是一个进程命令替换
  • 最后,</dev/stdin显然是标准输入的重定向,它允许管道工作.

这基本上说如果$1不是由参数填充,则回退到使用STDIN - 我在概念上很满意.

所以这是我的问题:

  1. 我从来没有<进程命令替换中看到redirect(),没有在它之前的实际命令(例如$(cat < somefile.ext)).那么当进程命令替换收到重定向而没有其他命令要调用时,实际发生了什么(细节)?
  2. 为什么有必要在进程命令替换中包装STDIN重定向?(实际上,当我写这个时,它发生在我身上,我没有测试它,但我会保持简单).
  3. 这样安全吗?我已经将它与多线STDIN一起使用了,到目前为止还没有破坏.这可能会降到哪里(如果在哪里?).

bash stdin command-substitution parameter-expansion

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

python opencv中的不规则形状检测和测量

我试图在python中使用OpenCV进行一些图像分析,但我认为图像本身会非常棘手,而且之前我从未做过这样的事情,所以我想说出我的逻辑,也许会得到一些想法/实用代码实现我想做的事情,在我投入大量时间走错路之前.

这个帖子非常接近我想要达到的目标,在我看来,使用的图像应该比我的更难分析.我会对那些彩色斑点的大小感兴趣,而不是它们与左上角的距离.我也一直在关注这段代码,虽然我对参考对象并不特别感兴趣(仅以像素为单位的尺寸就足够了,之后可以转换).

这是输入图像:

在此输入图像描述

你正在看的是冰晶,我想找到每个冰晶的平均大小.每个界限都有相当明确的定义,所以概念上这是我的方法,如果这是错误的方法,我想听听任何建议或意见:

  1. RGB中的图像被导入并转换为8位灰色(根据我在ImageJ中的测试,32会更好,但我还没想到如何在OpenCV中做到这一点).
  2. 边缘可选地是高斯模糊的以消除噪声
  3. Canny边缘探测器拾取线条
  4. 进行形态变换(侵蚀+膨胀)以试图进一步缩小边界.

在这一点上,似乎我可以做出选择.我可以对图像进行二值化,并测量高于阈值的斑点(即斑点为白色时的最大值像素),或者通过更完整地关闭和填充轮廓来继续边缘检测.虽然看了那个教程,轮廓似乎很复杂,虽然我可以让代码在我的图像上运行,但它并没有正确地检测到晶体(不出所料).我也不确定在二值化之前我是否应该进行变换?

假设我可以完成所有工作,我认为合理的测量将是最小封闭框或椭圆的最长轴.

我还没有完全解决所有的阈值,因此有些晶体被遗漏了,但由于它们被平均化,所以目前这并没有出现大问题.

该脚本在处理图像时会存储处理后的图像,所以我也希望最终的输出图像类似于链接的SO线程中的"标记的blob"图像,但每个blob都可以注释其尺寸.

这是一个(不完整的)理想化输出的样子,每个晶体都被识别,注释和测量(当我走得那么远时,我非常确定我可以解决测量).

在此输入图像描述


简化了图像和之前的代码尝试,因为它们使线程过长并且不再相关.


编辑III:

根据评论,分水岭算法看起来非常接近实现我所追求的目标.这里的问题是,分配算法所需的标记区域非常困难(http://docs.opencv.org/3.2.0/d3/db4/tutorial_py_watershed.html).

我不认为这是通过二值化过程可以通过阈值解决的问题,因为谷物的表观颜色变化远大于该线程中的玩具示例.

在此输入图像描述

编辑IV

这是我玩过的其他一些测试图像.它的表现比我预期的更小的水晶要好得多,显然很多可以通过我尚未尝试的阈值来完成.

这里是1,左上角到右下角对应于Alex在下面的步骤输出的图像.

在此输入图像描述

这是第二个更大的晶体.

在此输入图像描述

您会注意到这些颜色往往更均匀,但更难辨别边缘.我发现有点令人惊讶的是边缘泛滥对某些图像有点过于热心,我原本认为对于具有非常微小晶体的图像尤其如此,但实际上它似乎有更多的效果在较大的那些.从我们的实际显微镜可能有很大的空间来改善输入图像的质量,但是编程可以从系统中获得的"松弛"越多,我们的生活就越容易!

python opencv image image-processing computer-vision

7
推荐指数
1
解决办法
6416
查看次数

从 plotly 3d 图表创建视频

我想知道是否有人知道将 3d 图表导出为视频的方法(更具体地说,如果这可以在本地完成或需要 bodging)?

导出静态图像很简单,导出交互式绘图非常适合嵌入 HTML 等。

假设我有一个我想要的 3D 图表,所以只需缓慢旋转,如果图像可以旋转给定的时间间隔,拍摄的图像,无限旋转,可能是一个循环,这似乎很简单- 但我想知道这是否不受本机支持?

有谁知道一个好的策略吗?

R/RStudio 的理想解决方案,但由于 plotly 是跨平台的,因此可以考虑任何解决方案。

r plotly

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

使用“Gooey”在 GUI 和 CLI 模式之间切换的“聪明”方法

我正在对一个 GUI 程序进行第一次尝试,该程序包装了一个非常基本的脚本(这样不太懂 CLI 的人就可以运行它)。

我曾希望的一件事是,对于那些如此倾向于的人来说,该脚本仍然可以使用 CLI,并具有相同的选项。

我之所以使用Gooey它,是因为对于刚入门的人来说,它看起来很好而且很简单,但现在我对如何“切换”它感到困惑。

为了使用 GUI,必须使用 python 框架二进制文件来执行脚本,因此我的第一个想法是寻找使用非框架二进制文件显式调用脚本的人,并将 shebang 指向其余#!/usr/bin/env pythonw部分时间。我认为这原则上是可行的,但目前我只能想到使用简单的 if-else 进行测试。

这很好,但是@Gooey装饰器需要使用GooeyParsernot ArgumentParser(from argparse)。所以目前,这意味着我需要在代码中两次调用我的整个参数,这感觉绝对不是Pythonic。

例如:

from gooey import Gooey, GooeyParser

@Gooey(program_name="Hi I'm progam X")
def gui_args():
    """Parse GUI arguments"""    
    parser = GooeyParser()
    parser.add_argument(
        "-f",
        "--file",
        action="store",
        widget="FileChooser",
        help="Some input file."
        )


from argparse import ArgumentParser
def get_args():
    """Parse command line arguments"""    
    parser = ArgumentParser()
    parser.add_argument(
        "-f",
        "--file",
        action="store",
        help="Some input file."
        )

def main(): …
Run Code Online (Sandbox Code Playgroud)

python argparse

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

在python 3.x(使用wxPython GUI)日志中启用未缓冲的输出

我有一个一直在使用的Py3.x GUI应用程序Gooey。该应用程序功能齐全,并且GUI可以按预期工作,但内置控制台/终端接收缓冲的输出除外。

如果我使用来运行.py文件,这不是问题pythonw -u script.py,但是我现在尝试将工具捆绑/冻结到中.app。捆绑过程一直有效,但是在打开应用程序时仍然存在缓冲输出的问题。

到目前为止,我发现了以下内容,但没有尝试过:

  • 一些线程建议在每次调用时使用flush=Truewith print()进行写操作,但是logging-我在这里感兴趣的是-没有这样的互补标志。因此,该线程中的各种猴子修补解决方案对我也没有用(需要注意的是,我对logging井的内部结构并不了解,因此也许对记录器Gooey本身也可以应用类似的方法,并且打包过程输出的日志记录信息比我自己的调用要多得多,并且仍在缓冲中,因此看来“全局取消缓冲”才是真正需要的。

  • 该线程提供了许多方法。确实,建议sys.stdout使用0缓冲区大小的重新打开方法,但是在第一个线程中,根据PIP 3116以及在我看来,使用PIP 3116,它是否仍然可以在Python 3上使用还存在争议。

    nonbuffered_stdout = os.fdopen(sys.stdout.fileno(), 'w', 0)
    sys.stdout = nonbuffered_stdout
    
    Run Code Online (Sandbox Code Playgroud)

    似乎.app完全打破了。

  • 尝试将“ a” -uPYTHONUNBUFFERED=1“ shebang ”“注入” ,无论是否带有,都似乎不起作用(在本例中为MacOS)-S


因此,TL; DR

当未显式调用脚本时,如何在Python 3.x中实现无缓冲输出python3 -u

我仍在尝试将MWE gooey组合在一起,但是结合使用打包过程会使这变得有些困难。

python wxpython output-buffering

5
推荐指数
0
解决办法
130
查看次数

R中的情节热图 - 改变比例标题

我在R中创建了一个热图plot_ly,但我不能为我的生活弄清楚如何更改颜色图例上方出现的名称(更改输入数据框的名称).

麻烦的是,我想在标题的名称中使用空格,因为数据传递给plotly调用很困难.

必须有一种方法来直接编辑它,因为肯定会有其他标签/标题吗?!

我希望它会继承,legend=但看似没有..下面的代码和输出图像(试图改变当前说"data.matrix,adjwallace"的位).

(我没有提供数据,因为它与我不认为的特定问题无关 - 我不得不弄乱它的格式,但我可以根据需要进行编辑).

fonts <- list(
family = "sans-serif",
size = 12
)

x.axisSettings <- list(
 title = "",
 zeroline = FALSE,
 showline = FALSE,
 showticklabels = TRUE,
 showgrid = FALSE,
)

y.axisSettings <- list(
  title = "",
  zeroline = FALSE,
  showline = FALSE,
  showticklabels = TRUE,
  showgrid = FALSE,
)

legend.Settings <- list(
  font = fonts,
  title = "Adjusted Wallace Coefficients"
)

plot_ly(z = data.matrix(adjwallace),
        colorscale= "Hot",
        name = …
Run Code Online (Sandbox Code Playgroud)

r plotly

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