小编Cht*_*ect的帖子

使用geom_point在ggplot2中有条件地使用抖动

我有一个图表,其中12个变量分为两组.我不能使用facet,但使用颜色和形状,我已经能够使可视化易于理解.但是,有些点(部分或全部)重叠.我正在使用抖动来处理这些问题,但正如您从附图中看到的那样,这会导致所有点都被移动,而不仅仅是那些有重叠的点. 在此输入图像描述

有条件地使用抖动或闪避的方法吗?更好的是,有没有办法将部分重叠的点并排放置?正如您所看到的,我的x轴是离散类别,向左/右轻微移动无关紧要.我尝试使用dotplot binaxis='y',但这完全破坏了x轴.

编辑:此图表已成功完成我正在搜索的内容.

进一步编辑:添加此可视化背后的代码.

disciplines <- c("Comp. Sc.\n(17.2%)", "Physics\n(19.6%)", "Maths\n(29.4%)", "Pol.Sc.\n(40.4%)", "Psychology\n(69.8%)")

# To stop ggplot from imposing alphabetical ordering on x-axis
disciplines <- factor(disciplines, levels=disciplines, ordered=T)

# involved aspects
intensive   <- c( 0.660,  0.438,  0.515,  0.028,  0.443)
comparative <- c( 0.361,  0.928,  0.270,  0.285,  0.311)
wh_adverbs  <- c( 0.431,  0.454,  0.069,  0.330,  0.577)
past_tense    <- c(0.334, 0.229, 0.668, 0.566, 0.838)
present_tense <- c(0.680, 0.408, 0.432, 0.009, 0.996)
conjunctions <- c( 0.928,  0.207,  0.162, -0.299, -0.045) …
Run Code Online (Sandbox Code Playgroud)

plot visualization r ggplot2

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

Java三元运算符与空子句

这个问题更多的是我的好奇心而不是其他任何问题.

我经常使用Java的三元运算符来编写更短的代码.我一直在琢磨然而,无论是可能的,如果的一个使用它ifelse条件都是空的.更多细节:

int x = some_function();
if (x > 0)
    x--;
else
    x++;
Run Code Online (Sandbox Code Playgroud)

可写成 x = (x > 0) ? x-1 : x+1;

但是有可能if (x > 0) x-1;用空的else子句写成三元表达式吗?

java ternary-operator

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

R:使用ggplot2部分显示置信区间(使用geom_smooth())

我有以下简单的R代码:

disciplines <- c("A","C","B","D","E")
# To stop ggplot from imposing alphabetical ordering on x-axis
disciplines <- factor(disciplines, levels=disciplines, ordered=T)

d1 <- c(0.498, 0.521, 0.332, 0.04, 0.04)
d2 <- c(0.266, 0.202, 0.236, 0.06, 0.06)
d3 <- c(0.983, 0.755, 0.863, 0.803, 0.913)
d4 <- c(0.896, 0.802, 0.960, 0.611, 0.994)

df <- data.frame(disciplines, d1, d2, d3, d4)
df.m <- melt(df)
graph <- ggplot(df.m, aes(group=1,disciplines,value,colour=variable,shape=variable)) +
         geom_point() +
         geom_smooth(stat="smooth", method=loess, level=0.95) +
         scale_x_discrete(name="Disciplines") +
         scale_y_continuous(limits=c(-1,1), name="Measurement")
Run Code Online (Sandbox Code Playgroud)

输出如下所示: 在此输入图像描述

为什么置信区间不会沿整条曲线显示?

笔记:

  1. 我不想拥有,fullrange=TRUE因为它只产生一条直的蓝线而不是当前输出中的锯齿形状.
  2. 我将这个情节与另一个在(0,-1]范围内具有负值的情节进行比较,这就是y轴有的原因limits=c(-1,1) …

plot r smoothing ggplot2

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

根据某些字段的值从 ArrayList 中选择对象

我有一个 Course 类,其中包含各种类型的字段,以及各自的 getter 和 setter,例如:

float percentage
char courseLevel
String courseName
boolean takingNow
Run Code Online (Sandbox Code Playgroud)

然后我有一个 ArrayList 当然对象和一个方法:

public <T> ArrayList<Course> getCourses(int parameterId, T value) {
    ArrayList<Course> res = new ArrayList<Course>();
    switch(parameterId) {
        case COURSE_NAME:
            for(Course c: courseList) {
                if(c.getCourseName().equals(value) {
                    res.add(c)
                }
            }
            break;
        ....
        //rest of the cases
        ....
    }
    return res
}
Run Code Online (Sandbox Code Playgroud)

然后,该方法遍历课程的 ArrayList 并根据参数 ID 比较某个字段,如果课程字段等于传递的值,则将其添加到要返回的数组列表中。

有没有比以这种方式使用泛型更好的方法来做到这一点,我认为这是一种非常糟糕的编码实践。

java generics arraylist

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

对于应返回1的相似性度量,ws4j返回无穷大

我从这个例子中得到了一个非常简单的代码,我使用Lin,Path和Wu-Palmer相似性度量来计算两个单词之间的相似性.我的代码如下:

import edu.cmu.lti.lexical_db.ILexicalDatabase;
import edu.cmu.lti.lexical_db.NictWordNet;
import edu.cmu.lti.ws4j.RelatednessCalculator;
import edu.cmu.lti.ws4j.impl.Lin;
import edu.cmu.lti.ws4j.impl.Path;
import edu.cmu.lti.ws4j.impl.WuPalmer;

public class Test {
    private static ILexicalDatabase db = new NictWordNet();
    private static RelatednessCalculator lin = new Lin(db);
    private static RelatednessCalculator wup = new WuPalmer(db);
    private static RelatednessCalculator path = new Path(db);

    public static void main(String[] args) {
        String w1 = "walk";
        String w2 = "trot";
        System.out.println(lin.calcRelatednessOfWords(w1, w2));
        System.out.println(wup.calcRelatednessOfWords(w1, w2));
        System.out.println(path.calcRelatednessOfWords(w1, w2));
    }
}
Run Code Online (Sandbox Code Playgroud)

当两个单词相同时,分数都是预期的除外.如果两个单词相同(例如w1 = "walk"; w2 = "walk";),我所拥有的三个度量应该各自返回1.0.但相反,他们正在返回1.7976931348623157E308.

我之前使用过ws4j(实际上是相同的版本),但我从未见过这种行为.在线搜索没有产生任何线索.这里可能出现什么问题?

PS Lin,Wu-Palmer和Path测量值应返回1的事实也可以 …

java nlp wordnet ws4j

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

在Java中通过管道拆分会产生不同的结果

在任何人得出结论之前,是的,我知道需要逃脱管道符号 :-)

......在我的代码中,我已经这样做了:

String line = "C0000005|A13433185|SCUI|RB|C0036775|A7466261|SCUI||R86000559||MSHFRE|MSHFRE|||N||"
line = line.trim();
String[]     columns_array = line.trim().split("\\|");           // length = 15
List<String> columns_list  = Splitter.on("|").splitToList(line); // size   = 17
Run Code Online (Sandbox Code Playgroud)

我正在解析一个巨大的文件(~5GB),其中每一行都是管道分隔的,上面line是该文件中的第一个,我的代码崩溃,索引超出界限错误.经过调试,我意识到发生了什么,并添加了番石榴Splitter线作为一个完整性检查.使用拆分器,我得到了预期的列表.

为什么番石榴分离器和原生分裂的结果不同?

java regex arrays split guava

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

如何减少 x 轴上两个离散值之间的空间?

首先,我想在没有 ggplot 的情况下做到这一点。

我有一个用于箱线图的脚本:

data <- data.frame(
  u    = c(0.522, 0.488, 0.474, 0.443, 0.510, 0.443, 0.420, 0.554, 0.333, 0.414,
           0.467, 0.606, 0.588),
  ub   = c(0.594, 0.568, 0.578, 0.523, 0.577, 0.501, 0.522, 0.623, 0.498, 0.511,
           0.544, 0.654, 0.639),
  nu   = c(0.646, 0.620, 0.644, 0.607, 0.667, 0.614, 0.631, 0.701, 0.586, 0.589,
           0.664, 0.739, 0.744),
  nub  = c(0.733, 0.701, 0.700, 0.698, 0.724, 0.701, 0.722, 0.777, 0.630, 0.663,
           0.703, 0.78, 0.787),
  wnub = c(0.815, 0.782, 0.757, 0.764, 0.792, 0.771, 0.838, 0.860, 0.700, 0.703,
           0.774, …
Run Code Online (Sandbox Code Playgroud)

r

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

使用撇号或引号从终端传递命令行参数

我看到过有关将带引号的参数传递给 shell 脚本的问题(例如,这个问题)。

我的情况略有不同:

我正在从 bash 终端向我的 java 程序传递一个参数。可能的参数数量是有限的(准确地说是 20 个),其中之一是“阿尔茨海默病”。但如果我输入

java -cp ... myclass --term alzheimer's
Run Code Online (Sandbox Code Playgroud)

这就是我所看到的: 在此输入图像描述

..然后我必须按 ctrl+C 退出它。

如果它是一个包含所有字母数字字符的单词,则一切正常。对于这种带有撇号的情况我该怎么办?

bash command-line-arguments

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

java.nio.file.Path 与 sun.nio.fs.UnixPath

我的 Java 代码中几乎所有文件 I/O 操作都使用java.nio.*. 然而,今天在调试一段代码时,我注意到调试器(Intellij IDEA 14)显示了实例的以下信息java.nio.file.Path

调试器屏幕截图

为什么对象在调试器中java.nio.file.Path显示为对象?sun.nio.fs.UnixPath这两个类有什么区别?

java nio

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

如何对与实际绘制数据不同的数据使用 geom_smooth()?

我有一个使用 ggplot2 的折线图,其中包含三行(在我的数据框中有变量名称,例如“A”、“B”和“C”)。我想添加一个 geom_smooth 使用method=loess,但我想添加基于“B”和“C”的最小值的回归线。有没有办法做到这一点?

为了说明,这是一个模拟代码:

names  <- c('n1', 'n2', 'n3', 'n4', 'n5')
aline  <- c(0.18, 0.21, 0.23, 0.20, 0.16)
bline  <- c(0.50, 0.40, 0.30, 0.20, 0.10)
cline  <- c(0.14, 0.20, 0.30, 0.35, 0.33)
min_bc <- c(0.14, 0.20, 0.30, 0.20, 0.10)
df <- data.frame(name, aline, bline, cline)
df.m <- melt(df)
g <- ggplot(df.m, aes(group=1, names, value, colour=variable))
g <- g + geom_line(aes(group=variable))
g <- g + geom_point(aes(colour=variable), alpha=0.4)
Run Code Online (Sandbox Code Playgroud)

我想使用alineand添加回归线min_bc,而不实际绘制min_bc

另外,我想把它放在:一般来说,我可能有一些数据,我想使用不同的数据转换来绘制(在同一个图中)不同的线(或点、条形等)。是否有任何综合文档可以让我大致了解如何在 R/ggplot 中执行此类操作?

plot r ggplot2

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

Python使用iterable设置更新

我手边有一个体面大小的文本文件(~23MB).我正在逐行读取文件,并根据一些外部标准从每行中提取几个单词.为了这个例子,让我们说每行包含至少六个以制表符分隔的值,除了第一个和最后一个之外,我正在接收所有这些值.

我想输出以这种方式获得的一组唯一单词,所以显然我想将提取的单词存储在一个set.此外,由于set.update(other)比循环other和一次添加一个单词要快得多set.add(elem),我尝试这样做:

all_words = set()
with open(my_tsv_file) as tsv_file:
    for line in tsv_file:
        wordlist = based_on_some_criteria(line)    # this is a list, not a set
        all_words.update(wordlist)
Run Code Online (Sandbox Code Playgroud)

这很好用.但是当我替换all_words.update(wordlist)all_words |= wordlist,我得到以下错误:

TypeError: unsupported operand type(s) for |=: 'set' and 'list'
Run Code Online (Sandbox Code Playgroud)

从文档中,我理解update并且|=是等效的.此外,因为|=应该接受任何迭代,我也通过这样做证实:

import collections
isinstance(wordlist, collections.Iterable)        # returns True
Run Code Online (Sandbox Code Playgroud)

为什么第一种方法使用set.update工作,而不是第二种方法使用|=

python iterable set

0
推荐指数
2
解决办法
776
查看次数

Java:为什么for循环和while循环之间的内存使用有差异?

我正在读取XML文件并将其内容推送到ByteArrayOutputStream如下所示:

static final MY_XML_FILE = new File("...");

byte[] buffer = new byte[(int) MY_XML_FILE.length()];
    int bytesRead;
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    while ((bytesRead = fileInputStream.read(buffer)) != -1)
        output.write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.

我不喜欢在-loop bytesRead之外可见的范围while,所以我把它改成了for-loop:

for (int bytesRead = fileInputStream.read(buffer); bytesRead != -1; )
    output.write(buffer, 0, bytesRead);
Run Code Online (Sandbox Code Playgroud)

但是这会引发以下错误:

java.lang.OutOfMemoryError: Requested array size exceeds VM limit
    at java.util.Arrays.copyOf(Arrays.java:3236)
    at java.io.ByteArrayOutputStream.grow(ByteArrayOutputStream.java:113)
    at java.io.ByteArrayOutputStream.ensureCapacity(ByteArrayOutputStream.java:93)
    at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:140)
Run Code Online (Sandbox Code Playgroud)

我的问题是:两种循环方式不一样吗?如果没有,那么我想知道Java中的内存使用情况forwhile循环是如何不同的.

java memory loops java-8

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