2009-11-12 19 views
28

साथ साजिश मैं मूल्यों की 4 सेट हैं। वाई मान अलग-अलग श्रेणियों के हैं, और मुझे उन्हें वाई-अक्ष पर मूल्यों के अलग-अलग सेट के साथ अलग-अलग घटता के रूप में प्लॉट करने की आवश्यकता है।एक ही प्लॉट में 4 घटता, 3 y अक्षों

इसे सरल रखने के लिए, मुझे एक ही आंकड़े पर साजिश के लिए विभिन्न मूल्यों (स्केल) के साथ 3 वाई-अक्ष की आवश्यकता है।

किसी भी मदद की सराहना की, या कहां देखना है पर सुझाव।

उत्तर

22

यह एक बढ़िया हालांकि देर के संगठन कुछ बहुत ही दुर्भाग्य इंटरफेस डिजाइन विकल्पों में से सामना करना पड़ा है File Exchange. को पेश करने का मौका है, यह अभी भी करने के लिए पहले से पैक समाधान के लिए एक महान संसाधन है सामान्य समस्यायें। यद्यपि यहां कई लोगों ने आपको यह जानने के बारे में जानकारी दी है कि (@prm!), मुझे कुछ साल पहले इसी तरह की ज़रूरत थी और पाया कि addaxis बहुत अच्छी तरह से काम किया था। (यह एक बिंदु पर File Exchange pick of the week था!) ​​इसने later, probably better mods को प्रेरित किया है। यहाँ कुछ उदाहरण उत्पादन होता है:

addaxis example http://www.mathworks.com/matlabcentral/fx_files/9016/1/addaxis_screenshot.jpg

मैं सिर्फ File Exchange.

पर "plotyy" खोजा हालांकि समझ, महत्वपूर्ण में हो रहा है कभी कभी तुम सिर्फ बातें कर पाने की जरूरत है, उन्हें खुद कर नहीं। इसके लिए मैटलब सेंट्रल बहुत अच्छा है।

+0

क्या एक्स-अक्ष के लिए कुछ भी समान है? – smihael

2

PLOTYY दो अलग-अलग वाई-अक्षों की अनुमति देता है। या आप फ़ाइल एक्सचेंज से LayerPlot देख सकते हैं। मुझे लगता है कि मुझे पूछना चाहिए कि क्या आपने HOLD का उपयोग करने पर विचार किया है या बस डेटा को पुन: सहेज रहा है और नियमित पुरानी साजिश का उपयोग कर लिया है?

पुराने, क्या नहीं ओपी लिए देख रहा था: SUBPLOT आप एक से अधिक कुल्हाड़ियों में एक आंकड़ा खिड़की तोड़ने के लिए अनुमति देता है। फिर यदि आप केवल एक एक्स-अक्ष दिखाना चाहते हैं, या कुछ अन्य अनुकूलन चाहते हैं, तो आप प्रत्येक धुरी को स्वतंत्र रूप से कुशल बना सकते हैं।

+0

नहीं। ऐसा नहीं है। मुझे उन्हें एक ही ग्राफ पर एक ही ग्राफ पर चाहिए। – Rook

+0

ओह ऐसा लगता है कि हमारे पास साजिश और स्केलिंग का एक ही विचार था! – Amro

+0

@ एमेरो - तरह, स्केलिंग का मेरा विचार सभी वैक्टरों को उनके अधिकतम से विभाजित करने के साथ कुछ होने जा रहा था। आपका उदाहरण काफी परिष्कृत है! – mtrw

6

मुझे plotyy पता है जो आपको दो वाई-अक्ष रखने की अनुमति देता है, लेकिन कोई "plotyyy" नहीं है!

शायद आप y मानों को समान पैमाने (न्यूनतम/अधिकतम सामान्यीकरण, zscore मानकीकरण, आदि ..) के सामान्यीकृत कर सकते हैं, तो आप सामान्य plot, hold अनुक्रम का उपयोग करके आसानी से उन्हें साजिश कर सकते हैं।

%# random data 
x=1:20; 
y = [randn(20,1)*1 + 0 , randn(20,1)*5 + 10 , randn(20,1)*0.3 + 50]; 

%# plotyy 
plotyy(x,y(:,1), x,y(:,3)) 

%# orginial 
figure 
subplot(221), plot(x,y(:,1), x,y(:,2), x,y(:,3)) 
title('original'), legend({'y1' 'y2' 'y3'}) 

%# normalize: (y-min)/(max-min) ==> [0,1] 
yy = bsxfun(@times, bsxfun(@minus,y,min(y)), 1./range(y)); 
subplot(222), plot(x,yy(:,1), x,yy(:,2), x,yy(:,3)) 
title('minmax') 

%# standarize: (y - mean)/std ==> N(0,1) 
yy = zscore(y); 
subplot(223), plot(x,yy(:,1), x,yy(:,2), x,yy(:,3)) 
title('zscore') 

%# softmax normalization with logistic sigmoid ==> [0,1] 
yy = 1 ./ (1 + exp(-zscore(y))); 
subplot(224), plot(x,yy(:,1), x,yy(:,2), x,yy(:,3)) 
title('softmax') 

plotyy normalization

10

एक संभावना यह आप कोशिश कर सकते हैं 3 शीर्ष दो सेट 'none' के 'Color' गुणों के साथ दूसरे के ऊपर एक खड़ी कुल्हाड़ियों बनाने के लिए है:

यहाँ एक उदाहरण है ताकि सभी भूखंड दिखाई दे सकें। आपको अक्ष चौड़ाई, स्थिति, और एक्स-अक्ष सीमाओं को समायोजित करना होगा ताकि 3 वाई अक्ष एक-दूसरे के शीर्ष के बजाय साइड-बाय-साइड हों। आप अक्षरों के 2 अक्षरों से एक्स-अक्ष टिक अंक और लेबल को भी हटाना चाहते हैं क्योंकि वे एक दूसरे के शीर्ष पर झूठ बोलेंगे। परिणामी आंकड़ा है

%# Some sample data: 
x = 0:20; 
N = numel(x); 
y1 = rand(1,N); 
y2 = 5.*rand(1,N)+5; 
y3 = 50.*rand(1,N)-50; 

%# Some initial computations: 
axesPosition = [110 40 200 200]; %# Axes position, in pixels 
yWidth = 30;      %# y axes spacing, in pixels 
xLimit = [min(x) max(x)];   %# Range of x values 
xOffset = -yWidth*diff(xLimit)/axesPosition(3); 

%# Create the figure and axes: 
figure('Units','pixels','Position',[200 200 330 260]); 
h1 = axes('Units','pixels','Position',axesPosition,... 
      'Color','w','XColor','k','YColor','r',... 
      'XLim',xLimit,'YLim',[0 1],'NextPlot','add'); 
h2 = axes('Units','pixels','Position',axesPosition+yWidth.*[-1 0 1 0],... 
      'Color','none','XColor','k','YColor','m',... 
      'XLim',xLimit+[xOffset 0],'YLim',[0 10],... 
      'XTick',[],'XTickLabel',[],'NextPlot','add'); 
h3 = axes('Units','pixels','Position',axesPosition+yWidth.*[-2 0 2 0],... 
      'Color','none','XColor','k','YColor','b',... 
      'XLim',xLimit+[2*xOffset 0],'YLim',[-50 50],... 
      'XTick',[],'XTickLabel',[],'NextPlot','add'); 
xlabel(h1,'time'); 
ylabel(h3,'values'); 

%# Plot the data: 
plot(h1,x,y1,'r'); 
plot(h2,x,y2,'m'); 
plot(h3,x,y3,'b'); 

और यहाँ:

enter image description here

यहाँ लाइन में खड़ा एक सामान्य कार्यान्वयन कि कुल्हाड़ियों और x- अक्ष सीमा भूखंडों रखने के लिए के लिए ऑफसेट के लिए उचित पदों की गणना करता है ठीक से

4

मल्टी-स्केल प्लॉट दो अक्षों से परे खोजने के लिए दुर्लभ हैं ... सौभाग्य से मैटलैब में यह संभव है, लेकिन आपको अक्षरों को पूरी तरह से ओवरलैप करना होगा और टिकटें के साथ खेलना होगा ताकि जानकारी छिपाने के लिए नहीं।

नीचे एक अच्छा कामकाजी नमूना है। मुझे आशा है कि यह वही है जो आप खोज रहे हैं (हालांकि रंग बहुत अच्छे हो सकते हैं)!

close all 
clear all 

display('Generating data'); 

x = 0:10; 
y1 = rand(1,11); 
y2 = 10.*rand(1,11); 
y3 = 100.*rand(1,11); 
y4 = 100.*rand(1,11); 

display('Plotting'); 

figure; 
ax1 = gca; 
get(ax1,'Position') 
set(ax1,'XColor','k',... 
    'YColor','b',... 
    'YLim',[0,1],... 
    'YTick',[0, 0.2, 0.4, 0.6, 0.8, 1.0]); 
line(x, y1, 'Color', 'b', 'LineStyle', '-', 'Marker', '.', 'Parent', ax1) 

ax2 = axes('Position',get(ax1,'Position'),... 
      'XAxisLocation','bottom',... 
      'YAxisLocation','left',... 
      'Color','none',... 
      'XColor','k',... 
      'YColor','r',... 
      'YLim',[0,10],... 
      'YTick',[1, 3, 5, 7, 9],... 
      'XTick',[],'XTickLabel',[]); 
line(x, y2, 'Color', 'r', 'LineStyle', '-', 'Marker', '.', 'Parent', ax2) 

ax3 = axes('Position',get(ax1,'Position'),... 
      'XAxisLocation','bottom',... 
      'YAxisLocation','right',... 
      'Color','none',... 
      'XColor','k',... 
      'YColor','g',... 
      'YLim',[0,100],... 
      'YTick',[0, 20, 40, 60, 80, 100],... 
      'XTick',[],'XTickLabel',[]); 
line(x, y3, 'Color', 'g', 'LineStyle', '-', 'Marker', '.', 'Parent', ax3) 

ax4 = axes('Position',get(ax1,'Position'),... 
      'XAxisLocation','bottom',... 
      'YAxisLocation','right',... 
      'Color','none',... 
      'XColor','k',... 
      'YColor','c',... 
      'YLim',[0,100],... 
      'YTick',[10, 30, 50, 70, 90],... 
      'XTick',[],'XTickLabel',[]); 
line(x, y4, 'Color', 'c', 'LineStyle', '-', 'Marker', '.', 'Parent', ax4) 

alt text http://www.pablorodriguez.info/wp-content/Multiaxes.png

संबंधित मुद्दे