Azzera filtri
Azzera filtri

How to change axis tick values to specific dates?

1 visualizzazione (ultimi 30 giorni)
Hello, everybody, thanks for helping me on this. As I'm trying to reproduce a figure from a paper like this: it's a simple Monte Carlo simulated cumulative return series with 200 simulations spanning 10 years for daily returns.
In this figure as you see, the x-axis is labeled with years: 2004~2013, how do I reproduce something like this? I've tried the following code for simulation, and get the result, but the x-axis is not the years, just the indices for the returns, how to modify this?
>> mu = 0; sigma = 0.15; dt = 1/255; N = 10*255; nu = mu - sigma^2/2;
>> nudt = nu*dt;
>> sigmasqrtdt = sigma * sqrt(dt);
>> figure
>> M = 200;
>> plot(nudt.*cumsum(ones(N,M)) + sigmasqrtdt.*cumsum(randn(N,M)))
Resulting figure:
Besides, I noticed that the color set is different in the two figure, the top one has the order from red to yellow to blue as the cumulative returns goes down. But mine is random, could you help me to fix this, too? Thanks a lot.

Risposta accettata

Walter Roberson
Walter Roberson il 16 Giu 2015
%do the calculations
cumreturns = nudt.*cumsum(ones(N,M)) + sigmasqrtdt.*cumsum(randn(N,M));
%find the year for each location
years = linspace(2004,2014,N+1); %the very next point would be 2014
years = years(1:end+1); %but the last used point does not reach 2014
%do the plot
linehandles = plot(years, cumreturns);
set(linehandles, 'xtick', 2004:2014);
%coloring will be by final value, so retrieve them and sort
final_returns = cumreturns(end,:);
[sorted_final, sortidx] = sort(final_returns, 'stable');
%map so lowest value is first color, highest value is last
%we probably have more lines than available colors so some will be duplicated
cmap = colormap();
numcolors = size(cmap,1);
coloridxmap = round(linspace(1,numcolors,length(sortidx)));
coloridx = coloridxmap(sortidx);
%put the color setting into effect
for K = 1 : length(linehandles)
set(linehandles(K), 'Color', cmap(coloridx,:));
end

Più risposte (1)

arun
arun il 16 Giu 2015
I think u have plot ur y value vs index value. I hope length of x axis is 2550 else check that using size() or length() Here u can do one mapping from one axis to another,
m*(2550-1)=(2014-2004)
calculate "m" and and multiply that with index number i.e (1:2550) and plot that resultant vector against ur y value.

Categorie

Scopri di più su Log Plots in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by