я использовал еще одно решение, которое я нашел в сети..., этот находится под creativecommons и этим проверки, если источник был включен до вызова функции ...
можно найти файл здесь: include.js
/** include - including .js files from JS - bfults@gmail.com - 2005-02-09
** Code licensed under Creative Commons Attribution-ShareAlike License
** http://creativecommons.org/licenses/by-sa/2.0/
**/
var hIncludes = null;
function include(sURI)
{
if (document.getElementsByTagName)
{
if (!hIncludes)
{
hIncludes = {};
var cScripts = document.getElementsByTagName("script");
for (var i=0,len=cScripts.length; i < len; i++)
if (cScripts[i].src) hIncludes[cScripts[i].src] = true;
}
if (!hIncludes[sURI])
{
var oNew = document.createElement("script");
oNew.type = "text/javascript";
oNew.src = sURI;
hIncludes[sURI]=true;
document.getElementsByTagName("head")[0].appendChild(oNew);
}
}
}
Это отличный шанс познакомить вас с обменом файлами. Хотя организация в последнее время пострадала от некоторых очень неудачных вариантов дизайна интерфейса, она по-прежнему является отличным ресурсом для готовых решений распространенных проблем. Хотя многие здесь предоставили вам кровавые подробности того, как этого добиться (@prm!), Несколько лет назад у меня была аналогичная потребность, и я обнаружил, что addaxis работает очень хорошо. (В какой-то момент это был выбор недели для обмена файлами !) Позже он вдохновил , возможно, на лучшие моды . Вот пример вывода:
пример addaxis http://www.mathworks.com/matlabcentral/fx_files/9016/1/addaxis_screenshot.jpg
Я только что искал "plotyy" в File Exchange.
Хотя важно понимать, что происходит, иногда вам просто нужно сделать что-то, а не делать это самому. Matlab Central отлично подходит для этого.
Я знаю plotyy , который позволяет иметь две оси y, но не «plotyyy»!
Возможно, вы можете нормализовать значения y, чтобы они были одинаковыми масштаб (минимальная / максимальная нормализация, стандартизация zscore и т. д.), то вы можете просто построить их, используя нормальный график , удерживая
последовательность.
Вот пример:
%# 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 допускает две разные оси y. Или вы можете изучить LayerPlot из Файлового обмена. Думаю, мне следует спросить, рассматривали ли вы возможность использования HOLD или просто масштабирования данных и использования обычного старого графика?
OLD , а не то, что искал OP: СУБПЛОТ позволяет разбить окно фигуры на несколько осей. Затем, если вы хотите, чтобы отображалась только одна ось x или какая-либо другая настройка, вы можете управлять каждой осью независимо.
Один из вариантов, который вы можете попробовать, - это создать 3 оси, наложенные одна на другую, с помощью цвета ' Для свойств '
двух верхних задано значение ' none '
, так что все графики видны. Вам нужно будет отрегулировать ширину осей, положение и пределы оси X так, чтобы 3 оси Y располагались бок о бок, а не друг над другом. Вы также можете удалить отметки и метки оси X с двух осей, так как они будут лежать одна над другой.
Вот ' общая реализация, которая вычисляет правильные положения для осей и смещения для пределов оси x, чтобы графики были выровнены правильно:
%# 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');
и вот результат:
Мультимасштабные графики редко можно найти за пределами двух осей ... К счастью, в Matlab это возможно, но вы должны полностью перекрывать оси и играть с отметками, чтобы не скрывать информацию.
Вот хороший рабочий образец. Надеюсь, это то, что вы ищете (хотя цвета могли бы быть намного лучше)!
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)
(источник: pablorodriguez.info )