Matt Majic Asked: 2024-06-28 10:52:39 +0800 CST2024-06-28 10:52:39 +0800 CST 2024-06-28 10:52:39 +0800 CST 对数图中的网格线太多 772 当我向对数图添加网格线时,它似乎会自动添加所有可能的网格线,而我只想包含主线。我尝试关闭次要刻度,但没有效果。 例如: loglog([0.000001,0.1],[0.000001,0.1]) grid on gca.YAxis.MinorTick = 'off' 我怎样才能在标记的轴刻度处显示网格线? matlab 3 个回答 Voted Best Answer Wolfie 2024-06-28T15:34:10+08:002024-06-28T15:34:10+08:00 该loglog图的轴不寻常,因为默认情况下会启用次要刻度线,正如您通常期望主刻度线那样。因此,文档中的这种行为grid有点模棱两可: grid on显示gca 命令返回的当前轴的主网格线。主网格线从每个刻度标记延伸。 请注意,文档loglog中的大多数图表都使用grid on并显示您所看到的次要网格,因此我怀疑从 MathWorks 的角度来看这不是意外的行为。 由于无法在grid显式禁用次要网格线的同时调用(这应该是默认行为),因此您必须set在创建轴后更精细地管理网格。您可以在一个命令中启用主网格并禁用次要网格,而无需使用grid()任何命令... 在 R2020b Update 5 中测试: loglog([0.000001,0.1],[0.000001,0.1]) set(gca,'xminorgrid','off','yminorgrid','off','xgrid','on','ygrid','on') 编辑:从评论中的对话来看,Luis 建议应该grid on, grid minor可以。但是,在 R2020b 中测试却不行。在两个单独的调用中调用这些命令的工作方式与set上面的使用方式相同: loglog([0.000001,0.1],[0.000001,0.1]) grid on grid minor 我猜是因为图形缓冲区必须先刷新grid minor才能删除网格线,可能是因为如果不刷新,就没有什么可删除的了。你可以将其伪装成一行来drawnow刷新缓冲区,但那时我认为我建议只使用set上面显示的 loglog([0.000001,0.1],[0.000001,0.1]) grid on; drawnow(); grid minor 推测一下,也许作者认为loglog具有可变间距的小网格使得情节看起来更“逻辑化”?也就是说,它更明显是一个非线性尺度。 X Zhang 2024-06-28T14:15:14+08:002024-06-28T14:15:14+08:00 网格跟随刻度,因此 loglog([0.000001,0.1],[0.000001,0.1]) grid on set(gca(),'XTick',logspace(-6,-1,6),'YTick',logspace(-6,-1,6),'XMinorGrid','off','YMinorGrid','off') 给你 Luis Mendo 2024-06-28T20:26:46+08:002024-06-28T20:26:46+08:00 其他答案提供了解决方案,但没有解释为什么你的代码不起作用。为了清楚起见,首先应该注意 该gca函数给出当前的轴对象; YAxis后者的属性指的是数字标尺对象,它是轴的子对象。 您的代码有两个问题。第一个问题是 gca.YAxis.MinorTick = 'off' 不设置当前轴内数字标尺的属性。您不能直接将点索引应用于函数输出;您需要执行以下操作之一: 先将其分配给一个变量: a = gca; a.YAxis.MinorTick = 'off'; 使用括号(感谢@CrisLuengo!) gca().YAxis.MinorTick = 'off'; 使用get和set(更麻烦): set(get(gca, 'YAxis'), 'MinorTick', 'off') 您的代码所做的是创建一个具有gca指定字段、子字段和值的结构(从而隐藏同名函数)。没用。 第二个问题是,MinorTick数字标尺的属性仅影响次要刻度,而不影响次要网格线。您要设置的是YMinorGrid当前轴的属性。因此, a = gca; a.YMinorGrid = 'off'; 做你想做的事。
该
loglog
图的轴不寻常,因为默认情况下会启用次要刻度线,正如您通常期望主刻度线那样。因此,文档中的这种行为grid
有点模棱两可:请注意,文档
loglog
中的大多数图表都使用grid on
并显示您所看到的次要网格,因此我怀疑从 MathWorks 的角度来看这不是意外的行为。由于无法在
grid
显式禁用次要网格线的同时调用(这应该是默认行为),因此您必须set
在创建轴后更精细地管理网格。您可以在一个命令中启用主网格并禁用次要网格,而无需使用grid()
任何命令...在 R2020b Update 5 中测试:
编辑:从评论中的对话来看,Luis 建议应该
grid on, grid minor
可以。但是,在 R2020b 中测试却不行。在两个单独的调用中调用这些命令的工作方式与set
上面的使用方式相同:我猜是因为图形缓冲区必须先刷新
grid minor
才能删除网格线,可能是因为如果不刷新,就没有什么可删除的了。你可以将其伪装成一行来drawnow
刷新缓冲区,但那时我认为我建议只使用set
上面显示的推测一下,也许作者认为
loglog
具有可变间距的小网格使得情节看起来更“逻辑化”?也就是说,它更明显是一个非线性尺度。网格跟随刻度,因此
给你
其他答案提供了解决方案,但没有解释为什么你的代码不起作用。为了清楚起见,首先应该注意
gca
函数给出当前的轴对象;YAxis
后者的属性指的是数字标尺对象,它是轴的子对象。您的代码有两个问题。第一个问题是
不设置当前轴内数字标尺的属性。您不能直接将点索引应用于函数输出;您需要执行以下操作之一:
先将其分配给一个变量:
使用括号(感谢@CrisLuengo!)
使用
get
和set
(更麻烦):您的代码所做的是创建一个具有
gca
指定字段、子字段和值的结构(从而隐藏同名函数)。没用。第二个问题是,
MinorTick
数字标尺的属性仅影响次要刻度,而不影响次要网格线。您要设置的是YMinorGrid
当前轴的属性。因此,做你想做的事。