이 질문을 팔로우합니다.
- 팔로우하는 게시물 피드에서 업데이트를 확인할 수 있습니다.
- 정보 수신 기본 설정에 따라 이메일을 받을 수 있습니다.
Plot Multiple Time Series Based on Individual Condition
조회 수: 9 (최근 30일)
이전 댓글 표시
Dima
2011년 9월 14일
Hello Friends!
I am somewhat new to scientific charting) more accustomed to working in Excel, but I think I have run into its limitation as regards to charting…I am not sure if Matlab can do the following…
1) Take the time series data from excel, each data series will have three describers (first three rows of each column) – COLOUR, TYPE and THICKNESS 2) plots each time series data in such a way as: a) colors the time series according to a time series criterion (eg. 1 for red, 2 for black) b) allows to adjust the thinness of the plotted series based on another criterion (e.g. 10 very thick, 2- close to hairline) c)Sets the type of the trendline to dashed/solid (based on the Type criterion)
I can send an example worksheet if necessary..
Thanks for your time!) I will be glad to hear any opinion.
Dima
채택된 답변
Walter Roberson
2011년 9월 14일
You may wish to create some cell arrays to help:
colors = {'r', 'k', 'g'}; %red, black, green
linetypes = {'--', '-'}; %dashed, solid
% ....
thislinespec = [colors{column1}, linetypes{column2}];
thisthick = column3;
plot(x, y, thislinespec, 'thickness', thisthick);
댓글 수: 12
Dima
2011년 9월 14일
I wonder if you have some examples of such a code????:) I mean do you think there is a complete code to import excel data and plot it?
thanks a lot again!)
Walter Roberson
2011년 9월 14일
I do not have that code handy.
Is each row of your data a different time series? Do times and data values alternate, or is there a starting time and then a list of data values with an assumed constant time interval?
Dima
2011년 9월 14일
thank you very much for the fast reply, please see the following excel file for an example of the time series that I wish to plot (http://ifile.it/3o90rvu) the following is the snapshot of the first few rows:
1 1 0 1 COLOUR
1 2 1 2 TYPE
1 2 6 9 THICKNESS
1 1.040236104 1.038653607 0 0
2 1.039803766 1.038216885 0 0
3 1.039371429 1.037780164 0 0
4 1.038939091 1.037343443 0 0
5 1.038506753 1.036906721 0 0
6 1.038074416 1.03647 0 0
7 1.037642078 1.036033279 1.0624 0
8 1.03720974 1.035596557 1.061273448 0
9 1.036777403 1.035159836 1.060146897 0
Dima
2011년 9월 14일
so each time series starts at row 4 and all the criterion are placed above each time series....you think this way of placing the line qualities the best way to place them???
Walter Roberson
2011년 9월 14일
When you have variable amounts of data, it is easier parse if you put the constant part first and then the variable stuff. Thus I would suggest you move the words 'COLOUR' and 'TYPE' and 'THICKNESS' to be the first thing on their lines.
I gather that after that, the first thing on the line is a time, and the remaining items are the values of each of the time series at that time? Is there ever any missing data, and if so how is it indicated?
And to cross-check: you have 4 time series in that file? Or is the trailing 0 on the lines just to match the number of columns in the first 3 lines? If that is the case, is the initial 1 on the first three lines so that that information will sort first? And if so, if the data is being sorted, is the order of the 3 headers? If the initial 1 is to get the headers to sort first, would there not be a risk that some of the data lines might sort before the headers because their times happened to be earlier than "1" ? If you do for some reason need a constant "1" at the beginning of the header lines, then I would suggest moving the keyword to the second position unless there is a technical reason not to.
Dima
2011년 9월 14일
thanks again for the quick reply) I changed the placing of the criteria for each line, there are 4 lines, each labeled with a number, then in the separate part of the sheet the qualities for each of the four lines are listed in a table with three headings (for each criteria) and the corresponding values for each line....the lines each start at different times....the time is the row number itself.....there are no missing values - only times when the line does not exist (e.g.E8) in the updated file (http://ifile.it/rw9pzh8)
Walter Roberson
2011년 9월 14일
Consider the process of automating this when you do not know the number of timeseries ahead of time. You would have to ask to fetch the first row of the file, and search within that row looking for the keywords, and deduce the number of time series by looking to see which column the keywords start in. Possible, but probably not ideal.
Automation would be easier if the format were something like
A1 - contains number of time series
B1:B(=A1) - contain colour information
C1:C(=A1) - contain type information
D2:D(=A1) - contain thickness information
(E to end)1 - times
(E to end)(2:1+=A1) - values
Dima
2011년 9월 14일
yes I am looking exactly into automating this procedure in the future with previously unknown number of the time series to plot...do you think you can help me create a routine for plotting these four lines in the way that you described? maybe even to plot a single first series with three qualifiers listed in the last file I attached? I will happily continue from that...thank you so much for your attention to this question!)
Fangjun Jiang
2011년 9월 15일
@Wlater, What is 'thickness'? I could not specify that property. I could use 'linewidth'.
Walter Roberson
2011년 9월 15일
Fangjun, 'thickness' refers to the thickness of my head when I'm working on too many things at one time ;-(
Dima
2011년 9월 15일
yeah))) thickness must refer to the linewidth)))) Walter hopefully)) your head linewidth will go back to normal)))) Maybe then you can still help me create this kind of code that can build upon later...thanks!
추가 답변 (2개)
Fangjun Jiang
2011년 9월 14일
Yes, all is pretty straightforward in MATLAB. You can type help plot or doc plot in MATLAB for more information. Try this example for yourself.
figure;hold on
plot(1:10,'r','linewidth',10)
plot(rand(10,1),'g--')
Code below applies to a simple example Excel file.
[Num,Txt,Raw]=xlsread('test.xls');
colors = {'r', 'k', 'g'}; %red, black, green
linetypes = {'--', '-'}; %dashed, solid
figure(1);hold on;
for k=2:4
plot(Num(4:end,1),Num(4:end,k),[colors{Num(1,k)},linetypes{Num(2,k)}],'linewidth',Num(3,k));
end
댓글 수: 25
Dima
2011년 9월 15일
I wonder if you might have a chance to craft some into code that can handle this task??? I am new to Matlab and woudl appreciate if you could help me out)
Fangjun Jiang
2011년 9월 15일
I copied the below data to an Excel file called test.xls, note each data should be in a cell so the data will occupy from A1 to E12. Use the code in my answer to plot it.
1 1 2 3 COLOUR
1 2 1 2 TYPE
1 2 6 9 THICKNESS
1 1.040236104 1.038653607 0 0
2 1.039803766 1.038216885 0 0
3 1.039371429 1.037780164 0 0
4 1.038939091 1.037343443 0 0
5 1.038506753 1.036906721 0 0
6 1.038074416 1.03647 0 0
7 1.037642078 1.036033279 1.0624 0
8 1.03720974 1.035596557 1.061273448 0
9 1.036777403 1.035159836 1.060146897 0
Dima
2011년 9월 15일
that is so great!) thank you so much!) I tried to run the code you supplied above and it does plot one time series on a chart in red color and solid line type, the other time series are not plotted for a reason,
here is the message from Matlab:
[Num,Txt,Raw]=xlsread('test.xls');
colors = {'r', 'k', 'g'}; %red, black, green
linetypes = {'--', '-'}; %dashed, solid
figure(1);hold on;
for k=2:4
plot(Num(4:end,1),Num(4:end,k),[colors{Num(1,k)},linetypes{Num(2,k)}],'linewidth',Num(3,k));
end
Warning: Could not start Excel server for import, 'basic' mode will be used. Refer
to HELP XLSREAD for more information.
> In xlsread at 176
??? Subscript indices must either be real positive integers or logicals.
Do you think you can see if this can be corrected??
Thanks a lot for your time!)
Dima
Dima
2011년 9월 15일
I have also upload a snapshot of the figure chart at
http://ifile.it/fjhgbqd
Do you also see the same picture?
thanks!)
Fangjun Jiang
2011년 9월 16일
Do you have MS Excel on your computer? Is your computer a PC or Mac? The error message is about xlsread() function. Type doc xlsread to find out more.
Dima
2011년 9월 16일
Yes I have excel 2003 on Vista....you mean this error -"Subscript indices must either be real positive integers or logicals." is about not being able to load data properly from excel? or is it due to Matlab not understanding the inputs?
Dima
2011년 9월 16일
maybe there is something different in the excel sheet that I am using..do you think you can upload your version to ifile.it or any other place?
thanks!
Fangjun Jiang
2011년 9월 16일
That site requires registration or extra tickets. I won't do it. You can construct the Excel file according to my previous comment. Just put every space-delimited item in a separate cell so you get every cell filled from A1 to E12. Then the code should run without any problem.
Fangjun Jiang
2011년 9월 16일
Regarding the Excel error, refer to this post but I don't expect your Excel 2003 on Vista has that problem.
http://www.mathworks.com/matlabcentral/answers/14817-reading-excel-files-on-a-mac
Dima
2011년 9월 16일
thank you for your reply...I constructed the workbook exactly like you specified in the post above and it does not plot all the time series....can you please show me the kind of the chat you are getting???
That is so much appreciated....you can send it to my email..vincemaddox1024 at hotmail.com
Dima
2011년 9월 16일
wowoowwoowowoowowooowowowowowo it works!!! thanks so much for sending the file to my email...I was wondering if it can be possibel to make the dashed line with the smaller dots instead of the dashes???? and do you think it can be possibel to make the x axis the time axis instead of the single counter???? thank you again of your enormous contribution!!!
Fangjun Jiang
2011년 9월 16일
I think you've opened the door. You can type in help plot or doc plot in MATLAB Command Window to see how to change the color, marker and line style. In terms of x axis, plot(x,y) will use whatever data you have in the variable x.
Dima
2011년 9월 16일
great thanks! I will try to change the line type and x data to have the time there and will let you know) thanks again!)
Dima
2011년 9월 16일
I was able to change the lien type to dotted)) I added a new columnt similar to the original three and it says:
??? Index exceeds matrix dimensions.
please let me know how it is possible to plot more time series...
I changed the following code:
for k=2:4
to
for k=2:5
and it does not seem to work(
Thanks!)
Fangjun Jiang
2011년 9월 16일
The "for k=2:4" statement means to plot the data from 2nd to 4th columnn, if you change it to "2:5", you need to have data in the 5th column.
Go through the "Gettting Started" portion of the MATLAB document, you'll learn lots of the basics.
Dima
2011년 9월 16일
thanks...yes I did add the data in the 5th column and ran your code with the k=2:5 and it gives off the above error...(??? Index exceeds matrix dimensions. ) I surely need to read much more)) but I woudl be so thankful if you could show me how to add mroe columns to this calculations...that is the workbook I am using now:
1 1 2 1 1 COLOUR
1 2 1 2 3 TYPE
1 1 2 1 5 THICKNESS
1 5.678629242 7.703233636 4.445358125 5.954986076 0
2 5.660599394 7.685203788 4.40766875 5.955991899 0
3 5.642569545 7.667173939 4.369979375 5.956997722 0
4 5.624539697 7.649144091 4.33229 5.958003544 0
5 5.606509848 7.631114242 4.294600625 5.959009367 0
6 5.58848 7.613084394 4.25691125 5.96001519 0
7 5.570450152 7.595054545 4.219221875 5.961021013 0
8 5.552420303 7.577024697 4.1815325 5.962026835 0
9 5.534390455 7.558994848 4.143843125 5.963032658 0
10 5.516360606 7.540965 4.10615375 5.964038481
11 5.498330758 7.522935152 4.068464375 5.965044304
12 5.480300909 7.504905303 4.030775 5.966050127
13 5.462271061 7.486875455 3.993085625 5.967055949
14 5.444241212 7.468845606 3.95539625 5.968061772
15 5.426211364 7.450815758 3.917706875 5.969067595
16 5.408181515 7.432785909 3.8800175 5.970073418
Fangjun Jiang
2011년 9월 16일
I added a column and didn't have any error. You need to learn how to debug your code. Save the code in a script. Put a breakpoint and run the script one line at a time to see where is the problem.
Dima
2011년 9월 17일
thanks)) I have two days worth of experience of using matlab so I might need just a little bit more assistance from you)) I used the following excel file (http://www.sendspace.com/file/glvr6l) and this code:
%%
[Num,Txt,Raw]=xlsread('test.xls');
colors = {'r', 'k', 'g'}; %red, black, green
linetypes = {'--', '-'}; %dashed, solid
figure(1);hold on;
for k=2:5
plot(Num(4:end,1),Num(4:end,k),[colors{Num(1,k)},linetypes{Num(2,k)}],'linewidth',Num(3,k));
end
and I still get the error - not sure why....I understand the k runs to 5 and plots each column from 2 to 5 so I am not sure why it would give an error like that...thanks...
Fangjun Jiang
2011년 9월 17일
In the code, linetypes = {'--', '-'}, means two options. In your Excel file, you have line style valued at 3, that's the problem. Did you mix color and line style?
Dima
2011년 9월 17일
that is just superb!!!) thank you for your help...I AM STARTING TO FEEL THE real power of this programm...I wonder if it can be possible to add a text label at the start of each line from the heading(one extra row above the describers we have already)? I would happily code it myself))) right now - actually desire it so much..)))..Short update on my education progress -I got the book on Matlab today (Matlab:A Practical Introduction to Programming and Problem Solving) reading about operators now)))I just cannot have enough of its powerful functionality!)
Fangjun Jiang
2011년 9월 17일
Glad you like MATLAB programming. Reading that book is a really good start. If you have specific questions, this forum offers lots of help.
Dima
2011년 9월 17일
yes)) I have one short very specific question if you think the plot function can be used to add a text label to the start of each line??:)good night)
Dima
2011년 9월 28일
Fangjun Jiang! Maybe you can also help me with one more questions about the code you provided before....I wonder if it is possibel to specify the colors not in the default format (e.g. 'r') but in the RGB format ( [1 0 0])? I ask this because I need different shades few red and blue...) Thanks!) D
댓글 수: 1
Walter Roberson
2011년 9월 28일
[Num,Txt,Raw]=xlsread('test.xls');
colors = {'r', 'k', [0.6 0.8 3.9]}; %red, black, green
linetypes = {'--', '-'}; %dashed, solid
figure(1);hold on;
for k=2:4
plot(Num(4:end,1),Num(4:end,k),linetypes{Num(2,k)},'linewidth',Num(3,k), 'color', colors{k} );
end
참고 항목
카테고리
Help Center 및 File Exchange에서 MATLAB Functions in Microsoft Excel에 대해 자세히 알아보기
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)
아시아 태평양
- Australia (English)
- India (English)
- New Zealand (English)
- 中国
- 日本Japanese (日本語)
- 한국Korean (한국어)