Plot 倍频程:自动绘制任意对数基的对数图

Plot 倍频程:自动绘制任意对数基的对数图,plot,gnuplot,octave,Plot,Gnuplot,Octave,我想以对数刻度绘制一些数据,但找不到自动更改对数刻度基准的选项 x = 1:100; y = 2 .^ x; semilogy(x, y); 给我 我已经能够手动更改y刻度 x = 1:100; y = 2 .^ x; semilogy(x, y); set(gca, 'ytick', 2 .^ (0:20:100)); set(gca, 'yticklabel', {'2^{0}' '2^{20}' '2^{40}' '2^{60}' '2^{80}' '2^{100}'}); 给我

我想以对数刻度绘制一些数据,但找不到自动更改对数刻度基准的选项

x = 1:100;
y = 2 .^ x;

semilogy(x, y);
给我

我已经能够手动更改y刻度

x = 1:100;
y = 2 .^ x;

semilogy(x, y);
set(gca, 'ytick', 2 .^ (0:20:100));
set(gca, 'yticklabel', {'2^{0}' '2^{20}' '2^{40}' '2^{60}' '2^{80}' '2^{100}'});
给我


我对我得到的图很满意,但出于好奇,是否有一个选项可以自动更改对数刻度的对数基数?

正如Christoph所说,在倍频程或matlab中没有选项。如前所述,您可以稍微自动化该过程,并确保记号位置和标签之间的一致性

比如说

x = 1:100;
y = 2 .^ x;

semilogy(x, y);
base = 2;
tick_exponents = 0:20:100;
set(gca, 'ytick', base .^ tick_exponents);
format_string = sprintf('%d^{%%d}', base);
tick_labels = num2str(tick_exponents(:), format_string)
set(gca, 'yticklabel', tick_labels);
产生

我不知道您为什么添加了
gnuplot
标记。使用gnuplot,您只需使用
set logscale x 2
切换到使用基数2即可。@Christoph:我之所以添加它,是因为我认为gnuplot社区可能也知道在OctaveOk中执行此操作的方法,只是想知道使用普通gnuplot的答案是否也可以接受。我看了一下
semilogx.m
,它使用
set(gca,'xscale','log')
,但是
xscale
的唯一选项是
linear
log
。所以我想你们要么坚持使用手工勾号,要么直接使用gnuplot。我们拭目以待:)