[英]Generate area plot for time series in MATLAB
I'm trying to generate this figure shown below: 我正在尝试生成如下所示的数字:
figure http://www.cpc.ncep.noaa.gov/data/teledoc/nao.timeseries.gif 图http://www.cpc.ncep.noaa.gov/data/teledoc/nao.timeseries.gif
The data that I am using to try and generate this figure can be found here data. 我在这里可以找到用于尝试生成此图的数据。
This is a subset of the data that I extracted: 这是我提取的数据的子集:
d = [1950 1 0.56
1950 2 0.01
1950 3 -0.78
1950 4 0.65
1950 5 -0.50
1950 6 0.25
1950 7 -1.23
1950 8 -0.19
1950 9 0.39
1950 10 1.43
1950 11 -1.46
1950 12 -1.03
1951 1 -0.42
1951 2 0.35
1951 3 -1.47
1951 4 -0.38
1951 5 -0.50
1951 6 -1.35
1951 7 1.39
1951 8 -0.41
1951 9 -1.18
1951 10 2.54
1951 11 -0.54
1951 12 1.13
1952 1 0.57
1952 2 -1.38
1952 3 -1.97
1952 4 0.95
1952 5 -0.99
1952 6 -0.10
1952 7 -0.06
1952 8 -0.49
1952 9 -0.38
1952 10 -0.28
1952 11 -1.32
1952 12 -0.49
1953 1 -0.12
1953 2 -1.00
1953 3 -0.45
1953 4 -1.96
1953 5 -0.56
1953 6 1.41
1953 7 0.43
1953 8 -1.04
1953 9 -0.19
1953 10 1.95
1953 11 0.96
1953 12 -0.52
1954 1 -0.08
1954 2 0.40
1954 3 -1.27
1954 4 1.31
1954 5 -0.03
1954 6 0.06
1954 7 -0.57
1954 8 -2.57
1954 9 -0.28
1954 10 1.16
1954 11 0.29
1954 12 0.55
1955 1 -2.65
1955 2 -1.71
1955 3 -0.96
1955 4 -0.60
1955 5 -0.26
1955 6 -0.80
1955 7 1.78
1955 8 1.25
1955 9 0.46
1955 10 -1.09
1955 11 -1.49
1955 12 0.07
1956 1 -0.76
1956 2 -1.71
1956 3 -0.46
1956 4 -1.30
1956 5 2.10
1956 6 0.41
1956 7 -0.72
1956 8 -1.89
1956 9 0.38
1956 10 1.47
1956 11 0.40
1956 12 0.00
1957 1 0.71
1957 2 -0.32
1957 3 -1.73
1957 4 0.39
1957 5 -0.68
1957 6 -0.42
1957 7 -1.16
1957 8 -0.83
1957 9 -1.47
1957 10 1.95
1957 11 0.63
1957 12 0.02
1958 1 -1.14
1958 2 -1.64
1958 3 -2.46
1958 4 0.26
1958 5 -0.17
1958 6 -1.08
1958 7 -1.69
1958 8 -2.13
1958 9 0.08
1958 10 0.68
1958 11 1.59
1958 12 -0.74
1959 1 -1.52
1959 2 0.33
1959 3 -0.56
1959 4 0.25
1959 5 0.41
1959 6 0.71
1959 7 0.77
1959 8 -0.05
1959 9 1.00
1959 10 1.48
1959 11 0.30
1959 12 0.32
1960 1 -2.01
1960 2 -2.59
1960 3 -0.93
1960 4 1.33
1960 5 0.47
1960 6 0.10
1960 7 0.38
1960 8 -1.93
1960 9 0.53
1960 10 -1.37
1960 11 -0.67
1960 12 -0.03
1961 1 -0.03
1961 2 0.07
1961 3 0.17
1961 4 -1.83
1961 5 -0.28
1961 6 1.17
1961 7 -0.36
1961 8 1.03
1961 9 1.36
1961 10 1.07
1961 11 -0.79
1961 12 -1.46
1962 1 0.20
1962 2 0.18
1962 3 -2.99
1962 4 0.93
1962 5 -0.04
1962 6 0.47
1962 7 -2.43
1962 8 0.05
1962 9 -0.21
1962 10 0.96
1962 11 -0.38
1962 12 -1.31
1963 1 -2.98
1963 2 -1.53
1963 3 -0.85
1963 4 -1.61
1963 5 2.05
1963 6 -0.13
1963 7 -0.74
1963 8 -0.95
1963 9 1.89
1963 10 1.53
1963 11 -1.47
1963 12 -1.87
1964 1 -1.62
1964 2 -2.06
1964 3 -1.66
1964 4 0.25
1964 5 0.53
1964 6 1.61
1964 7 1.92
1964 8 -2.40
1964 9 0.34
1964 10 1.32
1964 11 -0.14
1964 12 -0.23
1965 1 -0.65
1965 2 -2.20
1965 3 -1.99
1965 4 0.64
1965 5 -0.52
1965 6 0.60
1965 7 0.35
1965 8 0.45
1965 9 0.51
1965 10 0.92
1965 11 -1.88
1965 12 1.18
1966 1 -2.54
1966 2 -2.02
1966 3 0.18
1966 4 -0.96
1966 5 0.25
1966 6 1.37
1966 7 0.35
1966 8 -2.39
1966 9 -0.29
1966 10 -0.23
1966 11 -0.18
1966 12 0.58];
I've tried the code below to generate the above plot: 我已经尝试了下面的代码来生成上面的图:
time = datenum(d(:,1),d(:,2),repmat(15,size(d,1),1));
nao = d(:,3);
figure(1);
ax1 = subplot(211);
area(time(nao < 0),nao(nao < 0),'FaceColor',[86 180 233]/255,'EdgeColor','none');
hold on;
area(time(nao > 0),nao(nao > 0),'FaceColor','r','EdgeColor','none');
datetick('x','yyyy','keeplimits');
ax2 = subplot(212);
bar(time(nao < 0),nao(nao < 0),'FaceColor',[86 180 233]/255,'EdgeColor','none');
hold on;
bar(time(nao > 0),nao(nao > 0),'FaceColor','r','EdgeColor','none');
datetick('x','yyyy','keeplimits');
linkaxes([ax1 ax2], 'x');
However, the output is not the same as that shown in the original figure, granted that they have a three month moving average. 然而,输出与原始图中所示的输出不同,因为它们具有三个月的移动平均值。 Ideally, I would have something that looked half like each of the plots I generated.
理想情况下,我会看到一些看起来像我生成的每个图的一半。 That is, an area plot but with only a red or blue color at any given time.
也就是说,区域图,但在任何给定时间只有红色或蓝色。 The area function seems to show these to happen at the same time, which is not correct.
区域功能似乎表明这些发生在同一时间,这是不正确的。 Any advice on how to generate the attached figure would be appreciated.
任何有关如何生成附图的建议都将受到赞赏。
Using areashade from MATLAB FileExchange, the following should produce what you need: 使用MATLAB FileExchange中的areashade ,以下内容应该可以满足您的需求:
figure(2);
areashade(time, nao, 0, [86 180 233]/255, 'h')
areashade(time, nao, 0,'r','l')
datetick('x','yyyy','keeplimits');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.