Hi,
I'm trying to plot the attached csv file, but i am having problems creating a tidy x axis labels. Ideally, I would like a label to read: 2000, 2004, 2008, 2012, 2016, 2020, starting on the earliest date for each year. However, despite trying to set my xtick using a string converted through datenum, I can't figure out how to achieve this result. My code, with the neatest labels I can manage, is attached, but this doesn't produce my desired labels. Any suggestions?
%plots the price of copper from https://www.macrotrends.net/1476/copper-prices-historical-chart-data
close all;
fid = fopen('copper-prices-historical-chart-data.csv');
if fid>0
% note how we skip the header lines and use the delimiter
data = textscan(fid,'%s %f','Delimiter',',','HeaderLines',16);
% close the file
fclose(fid);
startlim = datenum('07-Jan-2000');
endlim = datenum('31-Mar-2020');
date = data{1,1};
dn = datenum(date, 'yyyy-mm-dd');
price = data{1,2};
dateplot = dn(10141:end);
priceplot = price(10141:end);
plot(dateplot,priceplot);
xlim([startlim, endlim]);
xticks=get(gca,'xtick');
xtickangle(45);
set(gca,'xticklabel',cellstr(datestr(xticks))')
end
Thanks in advance.

 Akzeptierte Antwort

Star Strider
Star Strider am 9 Mär. 2020

3 Stimmen

Try this:
TCu = readtable('copper-prices-historical-chart-data.csv');
startlim = '07-Jan-2000';
endlim = '31-Mar-2020';
GetRows = isbetween(TCu.date, startlim, endlim);
figure
plot(TCu.date(GetRows), TCu.value(GetRows))
grid
xlim([datetime('01-Jan-2000') datetime('31-Dec-2020')])
xtickformat('yyyy')
xticks(datetime('01-Jan-2000') : calyears(4) : datetime('31-Dec-2020'))
producing:
The datetime functions require R2014b or later.

2 Kommentare

Ted Baker
Ted Baker am 9 Mär. 2020
Thank you very much for that example, Star Strider. It works perfectly.
Star Strider
Star Strider am 9 Mär. 2020
As always, my pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Adam Danz
Adam Danz am 9 Mär. 2020

1 Stimme

Convert your dates to datetime values using datetime().
Then use xtickformat('yyyy') to set the datetime format for the x-tick values.

4 Kommentare

Ted Baker
Ted Baker am 9 Mär. 2020
Bearbeitet: Ted Baker am 9 Mär. 2020
Thanks for the reply Adam, but despite looking at the references you provided, I am not able to figure out how to convert the date values using datetime. Are these converted values the ones I want to use to make my plot?
Adam Danz
Adam Danz am 9 Mär. 2020
You would use this syntax t = datetime(date,'InputFormat',infmt) (see link) on your date variable.
If you provide an example of the date variable I can be more specific.
Ravi
Ravi am 8 Dez. 2021
I have data which is time dependent but time data is not avaialble. I needed to plot this data with time so I created time loop with size matching up with the data size. I am able to get the plot but now I need to put in my desired time ticks on time axis. How can I do this ?
Adam Danz
Adam Danz am 8 Dez. 2021
Is your time vector in datetime format? If not, convert it to datetime format and use that vector for your x-variable when plotting so the ticks are in datetime format.

Melden Sie sich an, um zu kommentieren.

Kategorien

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by