我想生成一个具有base和ggplot图形组合的图形.以下代码使用R的基本绘图函数显示我的图:
t <- c(1:(24*14))
P <- 24
A <- 10
y <- A*sin(2*pi*t/P)+20
par(mfrow=c(2,2))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series")
acf(y,main = "Autocorrelation",xlab = "Lag (hours)", ylab = "ACF")
spectrum(y,method = "ar",main = "Spectral density function",
xlab = "Frequency (cycles per hour)",ylab = "Spectrum")
require(biwavelet)
t1 <- cbind(t, y)
wt.t1=wt(t1)
plot(wt.t1, plot.cb=FALSE, plot.phase=FALSE,main = "Continuous wavelet transform",
ylab = "Period (hours)",xlab = "Time (hours)")
Run Code Online (Sandbox Code Playgroud)
哪个生成

这些面板中的大多数看起来足以让我包含在我的报告中.但是,需要改进显示自相关的图.使用ggplot看起来好多了:
require(ggplot2)
acz <- acf(y, plot=F)
acd <- data.frame(lag=acz$lag, acf=acz$acf) …Run Code Online (Sandbox Code Playgroud) 为此问题的简单性提前道歉.我试图使用以下代码将.dat文件从网站导入R:
www = "http://www.nilu.no/projects/ccc/onlinedata/ozone/CZ03_2009.dat"
data <- read.delim(www, header = TRUE, sep="\t")
Run Code Online (Sandbox Code Playgroud)
我想访问data.frame的Value部分,但是,我不确定data.frame的维度,如果我输入ncol(data),它返回1,我期待三个.如何访问此data.frame的"第三"列?
是否可以将matlab图的字体转换为乳胶字体的字体.例如,我可以通过以下方式修改绘图的字体:
x = -pi:.1:pi;
y = sin(x);
plot(x,y)
set(gca,'FontName','Helvetica');
Run Code Online (Sandbox Code Playgroud)
是否有可能做同样但乳胶字体(我说乳胶字体,因为我不知道字体乳胶的实际名称用作其基本字体).
请考虑以下示例代码:
load sumsin;
s = sumsin+10; % example data series
time = linspace(0,5*24,1000);
figure(1);
subplot(311);
plot(time,s,'k');
subplot(312);
plot(time,s,'k');
hold on;
[s_denoised,~, ~] = wden(s,'minimaxi','s','sln',1,'db4');
plot(time,s_denoised,'r');
subplot(313);
plot(time,s,'k');
hold on;
plot(time,s_denoised,'r');
xlim([20 40]);
Run Code Online (Sandbox Code Playgroud)
导致

我想通过在子图2和3之间插入线来改变这个图,以表明子图3是subplot2的一部分.例如:

如何在matlab中实现这一目标?
编辑:
我想到的是在整个图形上生成一个不可见轴的线条,获得每个子图的位置,20和40的位置将是子图宽度的一定百分比,所以我可以使用此处的注释命令开始一行,然后将相同的方法应用于第三个子图,以将线连接到所需的位置.我试过这个,但到目前为止还没有解决方法.
我已经生成了一个结合了ggplot和基本图形的图形:
t <- c(1:(24*14))
P <- 24
A <- 10
y <- A*sin(2*pi*t/P)+20
#*****************************************************************************
par(mfrow = c(2,1))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude")
aa <- par("mai")
plot.new()
require(gridBase)
vps <- baseViewports()
pushViewport(vps$figure)
pushViewport(plotViewport(margins = aa)) ## I use 'aa' to set the margins
#*******************************************************************************
require(ggplot2)
acz <- acf(y, plot = FALSE)
acd <- data.frame(Lag = acz$lag, ACF = acz$acf)
p <- ggplot(acd, aes(Lag, ACF)) + geom_area(fill = "grey") +
geom_hline(yintercept = c(0.05, -0.05), linetype = "dashed") +
theme_bw() …Run Code Online (Sandbox Code Playgroud) 在R中生成数字时是否有一种指定字体大小的方法.这似乎是一个非常基本的要求,但我似乎找不到任何指定字体大小的地方的引用.我可以将数字保存为pdf,如下所示:
setwd("C:\\")
pdf(file="Plot.pdf",family="Times")
plot(x,y);
dev.off()
Run Code Online (Sandbox Code Playgroud)
其中R基本上生成pdf中的数字,而不是在图窗口中.当我寻找改变字体大小的方法时,我看到人们指的是cex = 1.5参数来缩放150%的字体,以及cex.lab,cex.axis等...虽然现在不是一个直接的问题,但我做的是想知道当我发布一些结果时会发生什么,而日志要求字体大小在9到11之间.如何控制R中的这些?任何建议,将不胜感激.
请考虑以下示例:
dat1 = 1;
dat2 = 2;
Variables = {'dat1','dat2'};
a = cellfun(@(x)exist(x,'var'),Variables);
for i = 1:length(Variables);
a2(i) = exist(Variables{i},'var');
end
Run Code Online (Sandbox Code Playgroud)
为什么'a'和'a2'返回不同的值,即为什么使用cellfun没有声明变量存在于工作空间中?我错过了什么?
我有一个相当简单的例子,我想学习最好的解决方案.我有一个数据集:
depth = [0:0.5:20];
Run Code Online (Sandbox Code Playgroud)
我只想从特定范围中选择"深度",例如从2到5.我可以通过以下方式执行此操作:
d1 = find(depth == 2,1,'first');
d2 = find(depth == 5,1,'first');
depth = depth(d1:d2);
Run Code Online (Sandbox Code Playgroud)
这样做有另一种更清洁的方法吗?
考虑以下:
DateTime = {'2007-01-01 00:00';'2007-02-01 00:00';'2007-03-01 00:00'};
Headers = {'Datetime','Data'};
Dat = [100,200,300];
Data = [DateTime,num2cell(Dat')];
Final = [Headers;Data];
Run Code Online (Sandbox Code Playgroud)
如何将"Final"中的数据写入制表符分隔的文本文件中.我知道如何在变量仅由数字输入组成时使用fopen,fprintf等,但我正努力解决这个问题.我试过了:
fid = fopen('C:\Documents\test.txt','wt');
fprintf(fid,'%s\t%s\n',Final{:});
fclose(fid);
Run Code Online (Sandbox Code Playgroud)
但是,这不会生成与matlab中生成的文本格式相同的文本文件.怎样才能解决这个问题?
请考虑以下示例:
Vars <- c("car","bike","lorry")
Dat <- c(10,20,22)
for (i in 1:length(Vars)){
assign(Vars[i],Dat[i])
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想在工作区中生成三个变量,这些变量根据条目Vars和中的值命名Dat.目前我正在使用循环,但我一直试图通过使用apply来删除循环,这样做的最佳方法是什么?