如何在Matlab中将原点设置为轴的中心

时间:2016-07-04 14:15:31

标签: matlab plot matlab-figure

当我在Matlab中绘制函数f(x)时,例如正弦函数,我得到的图是:

enter image description here

我想以一种不同的方式绘制它,例如,用Mathematica生成:

enter image description here

注意轴位置(连同刻度线)以及x和y标签位置。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:8)

因为并非所有读者都拥有最新版本的MATLAB,所以我决定让这个答案更加通用,所以现在它是一个函数,它将图形的句柄作为输入来操作,并将其原点设置为中心:

function AxesOrigin(figureh)
% set the origin of a 2-D plot to the center of the axes

figureh.Color = [1 1 1];
% get the original properties:
del_props =  {'Clipping','AlignVertexCenters','UIContextMenu','BusyAction',...
    'BeingDeleted','Interruptible','CreateFcn','DeleteFcn','ButtonDownFcn',...
    'Type','Tag','Selected','SelectionHighlight','HitTest','PickableParts',...
    'Annotation','Children','Parent','Visible','HandleVisibility','XDataMode',...
    'XDataSource','YDataSource','ZData','ZDataSource'};
lineprop = figureh.CurrentAxes.Children.get;
lineprop = rmfield(lineprop,del_props);

x = lineprop.XData;
y = lineprop.YData;
old_XTick = figureh.CurrentAxes.XTick;
old_YTick = figureh.CurrentAxes.YTick;
old_Xlim = figureh.CurrentAxes.XLim;
old_Ylim = figureh.CurrentAxes.YLim;

% check that the origin in within the data points
assert(min(x)<0 && max(x)>0 && min(y)<0 && max(y)>0,'The data do not cross the origin')

figureh.CurrentAxes.Children.delete
axis off

% Create Q1 axes
axes('Parent',figureh,...
    'Position',[0.5 0.5 0.4 0.4],...
    'XTick',old_XTick(old_XTick>0),...
    'YTick',old_YTick(old_YTick>0));
xlim([0 max(old_XTick)]);
ylim([0 max(old_YTick)]);

% Create Q3 axes
axes1 = axes('Parent',figureh,...
    'YAxisLocation','right',...
    'XAxisLocation','top',...
    'Position',[0.1 0.1 0.4 0.4],...
    'XTick',old_XTick(old_XTick<0),...
    'YTick',old_YTick(old_YTick<0));
xlim(axes1,[min(old_XTick) 0]);
ylim(axes1,[min(old_YTick) 0]);

% Create real axes
axes2 = axes('Parent',figureh,...
    'Position',[0.1 0.1 0.8 0.8]);
hold(axes2,'on');
axis off

plot(x,y,'Parent',axes2)
set(axes2.Children,lineprop)
xlim(axes2,old_Xlim);
ylim(axes2,old_Ylim);
end

它删除原始轴并放置另外两个以创建“原点”视图。它不是完美的,更像是解决方法的基本思想,应该针对特定目的进行调整,但如果您运行2015a或更早版本,它可能是一个好的开始。

<强>演示:

x=-2*pi:0.1:2*pi;
h = figure();
plot(x,sin(x),':or');

此代码创建此输出: sin function before

并在使用上述功能后:

AxesOrigin(h)

我们得到结果: sin function after

答案 1 :(得分:6)

从MATLAB 2015b开始(根据release notes),您可以使用new DialogBuilder(getActivity()) .setTitle(R.string.title) .setMessage(R.string.message) .setPrimaryButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // do something dialog.dismiss(); } }) .setSecondaryButton(R.string.settings_cancel, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // do something dialog.dismiss(); } }).create().show(); 'origin'属性的XAxisLocation选项。所以将它添加到您的代码中:

YAxisLocation

Source

答案 2 :(得分:0)

这对我有用:

ha = gca;
ha.XAxisLocation = 'origin';
ha.YAxisLocation = 'origin';

基于帮助页面&#34;显示轴线直通和#34; https://www.mathworks.com/help/matlab/creating_plots/display-axis-lines-through-origin.html