如何在 Matlab 中将网格线移动到背景?
How to move grid lines to background in Matlab?
我正在使用 Matlab 绘图。让我们绘制以下两个直方图:
figure;
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x,'FaceAlpha',0.1);
hold on
h2 = histogram(y,'FaceAlpha',0.1);
grid on
网格线并不是真的在背景中。我怎样才能将它们完全移到背景中,以便在条形图顶部看不到网格线?
网格线在背景中,但您可以看到它们,因为绘制的对象具有一定的透明度('FaceAlpha'
小于1
)。
为了达到你想要的效果,一个技巧是将每个直方图绘制两次:首先是 'FaceAlpha'
设置为 1
、'Facecolor'
白色和 'Edgcolor'
相等的版本到'none'
,覆盖网格线;然后是普通版。
figure;
x = randn(2000,1);
y = 1 + randn(5000,1);
histogram(x,'FaceAlpha',1,'Facecolor','w','Edgecolor','none');
hold on
histogram(y,'FaceAlpha',1,'Facecolor','w','Edgecolor','none');
h1 = histogram(x,'FaceAlpha',0.1);
h2 = histogram(y,'FaceAlpha',0.1);
grid on
网格线有点像在背景中。好吧,几乎:当对象完全不透明时它们会隐藏,当对象完全透明时它们会显示(但不幸的是它们不会像您说的那样显示在对象后面——更像是它们在对象上看起来是禁用的当它不透明时)。
您可以通过创建两个具有相同绘图的轴来欺骗 matlab 来执行您想要的操作,其中前景轴有轴关闭和透明绘图,背景轴有网格线和不透明的白色对象。
示例:(我使用旧语法,因为我的电脑上只有 matlab 2013a)
x = randn(2000,1);
y = 1 + randn(5000,1);
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(2),'FaceAlpha',0.1)
set(hs(1),'FaceAlpha',0.1)
axis off
ax_front = gca;
ax_back = axes;
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(1), 'faceColor', 'w')
set(hs(2), 'faceColor', 'w')
grid on
axes(ax_front)
或者,您始终可以创建自己的自定义 'gridlines' 函数,以完全控制您的网格线及其在绘图中的位置。
我正在使用 Matlab 绘图。让我们绘制以下两个直方图:
figure;
x = randn(2000,1);
y = 1 + randn(5000,1);
h1 = histogram(x,'FaceAlpha',0.1);
hold on
h2 = histogram(y,'FaceAlpha',0.1);
grid on
网格线并不是真的在背景中。我怎样才能将它们完全移到背景中,以便在条形图顶部看不到网格线?
网格线在背景中,但您可以看到它们,因为绘制的对象具有一定的透明度('FaceAlpha'
小于1
)。
为了达到你想要的效果,一个技巧是将每个直方图绘制两次:首先是 'FaceAlpha'
设置为 1
、'Facecolor'
白色和 'Edgcolor'
相等的版本到'none'
,覆盖网格线;然后是普通版。
figure;
x = randn(2000,1);
y = 1 + randn(5000,1);
histogram(x,'FaceAlpha',1,'Facecolor','w','Edgecolor','none');
hold on
histogram(y,'FaceAlpha',1,'Facecolor','w','Edgecolor','none');
h1 = histogram(x,'FaceAlpha',0.1);
h2 = histogram(y,'FaceAlpha',0.1);
grid on
网格线有点像在背景中。好吧,几乎:当对象完全不透明时它们会隐藏,当对象完全透明时它们会显示(但不幸的是它们不会像您说的那样显示在对象后面——更像是它们在对象上看起来是禁用的当它不透明时)。
您可以通过创建两个具有相同绘图的轴来欺骗 matlab 来执行您想要的操作,其中前景轴有轴关闭和透明绘图,背景轴有网格线和不透明的白色对象。
示例:(我使用旧语法,因为我的电脑上只有 matlab 2013a)
x = randn(2000,1);
y = 1 + randn(5000,1);
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(2),'FaceAlpha',0.1)
set(hs(1),'FaceAlpha',0.1)
axis off
ax_front = gca;
ax_back = axes;
hist(x);
hold on
hist(y);
hs = findobj(gca, 'Type', 'patch')
set(hs(1), 'faceColor', 'w')
set(hs(2), 'faceColor', 'w')
grid on
axes(ax_front)
或者,您始终可以创建自己的自定义 'gridlines' 函数,以完全控制您的网格线及其在绘图中的位置。