我正在尝试使用ggplot2绘制世界地图.这是我到目前为止:
library(ggplot2)
world <- map_data("world")
ggplot(aes(long, lat, group=group), data=world) + geom_polygon()
Run Code Online (Sandbox Code Playgroud)
这很好用,很容易做到.不幸的是,世界地图数据似乎很旧.例如,新加坡和捷克共和国等国家失踪,而且还有像苏联这样的地区.知道如何获得更新的世界地图数据吗?
sort( unique(world$region) ) [1] "Afghanistan" "Albania" "Algeria" [4] "American Samoa" "Andaman Islands" "Andorra" [7] "Angola" "Anguilla" "Antarctica" [10] "Antigua" "Aral Sea" "Argentina" [13] "Aruba" "Australia" "Austria" [16] "Azores" "Bahamas" "Bahrain" [19] "Bangladesh" "Barbados" "Barbuda" [22] "Belgium" "Belize" "Benin" [25] "Bhutan" "Black Sea" "Bolivia" [28] "Bonaire" "Botswana" "Brazil" [31] "Brunei" "Bulgaria" "Burkina Faso" [34] "Burundi" "California" "Cambodia" [37] "Cameroon" "Canada" "Canary Islands" [40] "Cape Verde" "Caspian Sea" "Cayman Islands" …
我正在开发一个更大的项目,我正在ggplot2中创建几个图.这些图涉及绘制几个不同类别的几种不同结果(想想:国家,物种,类型).我想完全修复离散类型到颜色的映射,使得Type = A始终显示为红色,Type = B始终显示为蓝色,依此类推所有绘图,而不管其他因素是什么.我知道scale_fill_manual()我可以在哪里手动提供颜色值,然后使用drop = FALSE它有助于处理未使用的因子水平.但是,我发现这非常麻烦,因为每个绘图都需要一些手动工作来处理以正确方式排序因子,排序颜色值以匹配因子排序,丢弃未使用的级别等.
我正在寻找的是一种方式,我可以映射一次和全局因素水平到特定的颜色(A =绿色,B =蓝色,C =红色,......)然后只是绘制任何我喜欢的绘图和ggplot挑选正确的颜色.
这里有一些代码来说明这一点.
# Full set with 4 categories
df1 <- data.frame(Value = c(40, 20, 10, 60),
Type = c("A", "B", "C", "D"))
ggplot(df1, aes(x = Type, y = Value, fill = Type)) + geom_bar(stat = "identity")
# Colors change complete because only 3 factor levels are present
df2 <- data.frame(Value = c(40, 20, 60),
Type = c("A", "B", "D"))
ggplot(df2, aes(x = Type, y …Run Code Online (Sandbox Code Playgroud) 在R中,我有两个对的向量,如下所示:
x <- c("A=5", "B=1", "D=1", "E=1", "F=2", "G=1")
y <- c("A=2", "B=1", "C=3", "D=1", "H=4")
Run Code Online (Sandbox Code Playgroud)
我想将其转换为data.frame,如下所示:
A B C D E F G H
x 5 1 0 1 1 2 1 0
y 2 1 3 1 0 0 0 4
Run Code Online (Sandbox Code Playgroud)
包含在x或y中的所有键都应构成列,未出现在x或y中的键应添加值为零.
在R中,当一些系数由于奇点而被丢弃时,如何使用vcovHC()计算稳健的标准误差?标准的lm函数似乎可以很好地计算实际估计的所有系数的正常标准误差,但vcovHC()会抛出一个错误:"面包错误.%*%肉.:不一致的参数".
(我使用的实际数据有点复杂.事实上,它是一个使用两种不同固定效果的模型,我遇到局部奇点,我不能简单地摆脱它.至少我不知道如何.对于两个固定效应我使用第一个因子有150个级别,第二个有142个级别,总共有九个奇点,这是因为数据是在十个块中收集的.)
这是我的输出:
Call:
lm(formula = one ~ two + three + Jan + Feb + Mar + Apr + May +
Jun + Jul + Aug + Sep + Oct + Nov + Dec, data = dat)
Residuals:
Min 1Q Median 3Q Max
-130.12 -60.95 0.08 61.05 137.35
Coefficients: (1 not defined because of singularities)
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1169.74313 57.36807 20.390 <2e-16 ***
two -0.07963 0.06720 -1.185 0.237
three -0.04053 0.06686 -0.606 0.545
Jan 8.10336 …Run Code Online (Sandbox Code Playgroud) 我不是 C 方面的专家,我正在寻找一些建议来使我的程序更加健壮和可靠。只是为了提供一些背景信息:我编写了一个程序来执行一些科学计算,该程序需要相当长的时间(大约 20 小时),我正在使用 SLRUM 调度系统和 NFS 安装的文件系统在大型大学 HPC Linux 集群上执行。似乎发生的情况是,在 20 小时内的某个时间,与文件系统的连接变得陈旧(在整个计算机上;独立于我的程序),并且第一次尝试打开和写入文件需要很长时间,这会导致segfault cored dumped 错误,到目前为止我还无法精确追踪。下面是一个最小文件,至少在概念上重现了该错误:程序启动,打开一个文件,一切正常。该程序进行了一些长时间的计算(由 sleep() 模拟),尝试再次打开并写入同一文件,但失败了。有哪些约定可以使我的代码更加健壮并可靠地将结果写入文件而不会崩溃?
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv) {
// Declare variables
FILE *outfile;
char outname[150] = "result.csv";
// Open file for writing
printf("CHECKING if output file '%s' is writable?", outname);
outfile=fopen(outname, "w");
if (outfile == NULL) {
perror("Failed: ");
exit(EXIT_FAILURE);
}
fclose(outfile);
printf(" PASSED.\n");
// Do some computation that takes really long (around 19h)
sleep(3);
// Open …Run Code Online (Sandbox Code Playgroud) 我有以下基本代码来绘制网格。
grid <- expand.grid( pi=seq(50, 95, 5) / 100, mu2=seq(5, .5, -.5) )
pi <- seq(44, 100, .5) / 100
par( mai=c(.05, .05, .05, .05), oma=c(2.9, 2.9, 0, 0) ) # Make room for label
plot( grid, cex=.5, xlab="", ylab="", cex.axis=.7 )
Run Code Online (Sandbox Code Playgroud)
如红色圆圈所示,如何在左上角绘制文本标签,例如“(A)”?
编辑:“(A)”应按规则的,即水平的阅读方向打印;不垂直于y轴。
