我有一个图表,其中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) 这个问题更多的是我的好奇心而不是其他任何问题.
我经常使用Java的三元运算符来编写更短的代码.我一直在琢磨然而,无论是可能的,如果的一个使用它if或else条件都是空的.更多细节:
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子句写成三元表达式吗?
我有以下简单的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)
输出如下所示:

为什么置信区间不会沿整条曲线显示?
笔记:
fullrange=TRUE因为它只产生一条直的蓝线而不是当前输出中的锯齿形状.limits=c(-1,1) …我有一个 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 比较某个字段,如果课程字段等于传递的值,则将其添加到要返回的数组列表中。
有没有比以这种方式使用泛型更好的方法来做到这一点,我认为这是一种非常糟糕的编码实践。
我从这个例子中得到了一个非常简单的代码,我使用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的事实也可以 …
在任何人得出结论之前,是的,我知道需要逃脱管道符号 :-)
......在我的代码中,我已经这样做了:
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线作为一个完整性检查.使用拆分器,我得到了预期的列表.
为什么番石榴分离器和原生分裂的结果不同?
首先,我想在没有 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) 我看到过有关将带引号的参数传递给 shell 脚本的问题(例如,这个问题)。
我的情况略有不同:
我正在从 bash 终端向我的 java 程序传递一个参数。可能的参数数量是有限的(准确地说是 20 个),其中之一是“阿尔茨海默病”。但如果我输入
java -cp ... myclass --term alzheimer's
Run Code Online (Sandbox Code Playgroud)
这就是我所看到的:

..然后我必须按 ctrl+C 退出它。
如果它是一个包含所有字母数字字符的单词,则一切正常。对于这种带有撇号的情况我该怎么办?
我的 Java 代码中几乎所有文件 I/O 操作都使用java.nio.*. 然而,今天在调试一段代码时,我注意到调试器(Intellij IDEA 14)显示了实例的以下信息java.nio.file.Path:

为什么对象在调试器中java.nio.file.Path显示为对象?sun.nio.fs.UnixPath这两个类有什么区别?
我有一个使用 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 中执行此类操作?
我手边有一个体面大小的文本文件(~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工作,而不是第二种方法使用|=?
我正在读取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中的内存使用情况for和while循环是如何不同的.