How to plot date on x-axis when it is retrieved as 'text' from table.
이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
오류 발생
페이지가 변경되었기 때문에 동작을 완료할 수 없습니다. 업데이트된 상태를 보려면 페이지를 다시 불러오십시오.
이전 댓글 표시
I want to plot time series from a .txt file. After importing the file as attached sample.txt. I run the following code to read the 5th and the 7th column. I am facing problem in retrieving the 'date' given in 5th column so that I can plot a scatter plot. The x-label should like 2013 2014 2015 ....
I would be grateful if you can help to resolve my issue.
data=sample;
[a,b]=size(data);
j=1;
n=500;
d=zeros(n,1); %Problem
for i=1:a
if strcmp("AREQ",data.SITE(i,1))
x(j)=data{i,7};
d(j)=datetime(data{i,5},'InputFormat','yyyy-MM-dd'); %Problem
j=j+1;
end
end
%% Plotting
A=x(1:j-1,:);
D=datetime(d(1:j-1,:));
figure;
scatter(D,A); % Problem...The x-axis should be in year 2013 2014 2015 ..
Thank you
채택된 답변
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1113585/sample.txt')
T1 = 67×21 table
Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 Var10 Var11 Var12 Var13 Var14 Var15 Var16 Var17 Var18 Var19 Var20 Var21
________ _____ ____ ____ __________ _____ ___________ __________ ______ _____ ________ ________ ________ _____ ___________ ___________ ___________ _____ ________ ________ ________
{'AREQ'} 56301 2013 9 2013-01-09 {'|'} 2.6245e+06 4.6466e+07 792.29 {'|'} 0.006992 0.002125 0.005306 {'|'} -2.7134e+05 5.8364e+06 2.5514e+06 {'|'} 0.002116 0.004828 0.007333
{'AREQ'} 56302 2013 10 2013-01-10 {'|'} 2.6245e+06 4.6466e+07 792.28 {'|'} 0.007329 0.002045 0.005595 {'|'} -2.7134e+05 5.8364e+06 2.5514e+06 {'|'} 0.002034 0.005107 0.00768
{'AREQ'} 56303 2013 11 2013-01-11 {'|'} 2.6245e+06 4.6466e+07 792.28 {'|'} 0.007111 0.001963 0.005342 {'|'} -2.7134e+05 5.8364e+06 2.5514e+06 {'|'} 0.001953 0.004836 0.007467
{'AREQ'} 56304 2013 12 2013-01-12 {'|'} 2.6245e+06 4.6466e+07 792.28 {'|'} 0.007199 0.00199 0.005435 {'|'} -2.7134e+05 5.8364e+06 2.5514e+06 {'|'} 0.001978 0.004932 0.007555
{'AREQ'} 57531 2013 144 2013-05-23 {'|'} 2.6245e+06 4.6466e+07 792.29 {'|'} 0.007362 0.001667 0.005361 {'|'} -2.7134e+05 5.8364e+06 2.5514e+06 {'|'} 0.001654 0.004773 0.007759
{'AREQ'} 56293 2013 1 2013-01-01 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007153 0.002007 0.004971 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001317 0.004951 0.007326
{'AREQ'} 56294 2013 2 2013-01-02 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007185 0.002028 0.005038 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001319 0.005028 0.007355
{'AREQ'} 56295 2013 3 2013-01-03 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007039 0.001971 0.004903 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001283 0.004886 0.007208
{'AREQ'} 56296 2013 4 2013-01-04 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007311 0.001979 0.004904 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001314 0.004844 0.007498
{'AREQ'} 56297 2013 5 2013-01-05 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007211 0.002011 0.00493 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001347 0.004891 0.00739
{'AREQ'} 56298 2013 6 2013-01-06 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007641 0.002071 0.005183 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001347 0.005134 0.007833
{'AREQ'} 56299 2013 7 2013-01-07 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007715 0.002148 0.005241 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001452 0.005191 0.007908
{'AREQ'} 56300 2013 8 2013-01-08 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.008008 0.002159 0.005381 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001419 0.005319 0.008212
{'AREQ'} 56301 2013 9 2013-01-09 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.00731 0.002007 0.00491 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001357 0.004851 0.007496
{'AREQ'} 56302 2013 10 2013-01-10 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007659 0.002114 0.005191 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001417 0.005139 0.007851
{'AREQ'} 56303 2014 11 2014-01-11 {'|'} -1.8221e+06 1.9234e+07 2488.9 {'|'} 0.007443 0.002034 0.00495 {'|'} 1.9428e+06 -5.8041e+06 -1.7969e+06 {'|'} 0.001391 0.004877 0.007636
T1.Var5 % Check
ans = 67×1 datetime array
2013-01-09
2013-01-10
2013-01-11
2013-01-12
2013-05-23
2013-01-01
2013-01-02
2013-01-03
2013-01-04
2013-01-05
2013-01-06
2013-01-07
2013-01-08
2013-01-09
2013-01-10
2014-01-11
2014-01-12
2014-01-13
2014-01-14
2014-01-15
2014-01-16
2014-01-17
2014-01-18
2015-01-19
2015-01-20
2015-01-21
2015-01-22
2015-01-23
2015-01-24
2015-01-25
SelectRows = strcmp(T1.Var1,'AREQ');
figure
scatter(T1.Var5(SelectRows), T1.Var7(SelectRows))

% xlim([datetime(2013,01,01) datetime(2014,01,01)])
The loop is not necessary.
.
댓글 수: 12
Perfect, thank you :)
My pleasure!
If my Answer helped you solve your problem, please Accept it!
.
Okay, I have another small query over it. If I want to just display years in x axis label, then what's the function for it.
years in 'yyyy' format.
It does that automatically here. Otherwise, use the xtickformat (introduced in R2016b) function, specifically:
xtickformat('yyyy')
Thank you :)
As always, my pleasure!
How can I plot trendline on this scatter plot. As I am trying with lsline. But error prompts in with
Check for incorrect argument data type or missing argument in call to function 'isnan'.
The lsline function apparently doesn’t like datetime variables, so use polyfit and polyval (with modifications) instead — .
T1 = readtable('https://www.mathworks.com/matlabcentral/answers/uploaded_files/1113585/sample.txt');
% T1.Var5 % Check
SelectRows = strcmp(T1.Var1,'AREQ');
figure
scatter(T1.Var5(SelectRows), T1.Var7(SelectRows))
[B,S,mu] = polyfit(datenum(T1.Var5(SelectRows)), T1.Var7(SelectRows),1); % Use 'datenum' & Centreing & Scaling
ls = polyval(B,datenum(T1.Var5(SelectRows)),S,mu); % Evaluate
hold on
plot(T1.Var5(SelectRows), ls, '-r') % Plot Trend Line
hold off

% xlim([datetime(2013,01,01) datetime(2014,01,01)])
They apparently do not like datetime variables either, however it is possible to deceive them (using datenum) to get a reasonable result. The advantage to this approach is that it is not necessarily restricted to a linear fit, and can accommodate higher-order polynomials if desired.
.
Thank you very much :) Let me try.
It worked. Thank you so much. I have been looking for answers from long. :) :)
Have a wonderful weekend
As always, my pleasure!
You, too!
추가 답변 (0개)
카테고리
도움말 센터 및 File Exchange에서 Calendar에 대해 자세히 알아보기
참고 항목
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
