移动半日志图表

时间:2015-11-22 18:27:49

标签: matlab charts

有两件相关的事情我想请求帮助。 1)我正在尝试移动“半对数”图表(使用semilogy),以便新行通过图表上的给定点,但 仍然显示为并行< / em> 到原版。 2)完全按照1)中的方式移动“线”,但也反转斜率。

我认为用实际图表可以很好地说明所需的结果。

给出以下代码:

x = [50 80];
y = [10 20];

all_x = 1:200;

P = polyfit(x, log10(y),1);
log_line = 10.^(polyval(log_line,all_x));

semilogy(all_x,log_line)

我获得以下图表: chart 1

对于1),假设我想移动线,使其通过点(20,10)。期望的结果看起来像下面的橙色线(请注意我在(20,10)点添加了一个蓝点仅供参考):

enter image description here

对于2),我想取1)中的线并取斜率的倒数,以便最终结果看起来像下面的橙色线:

enter image description here

如果需要澄清,请告诉我。

编辑:根据Will的回答(如下),解决方案如下:

%// to shift to point (40, 10^1.5)

%// solution to 1)
log_line_offset = (10^1.5).^(log10(log_line)/log10(10^1.5) + 1-log10(log_line(40))/log10(10^1.5));

%// solution to 2)
log_line_offset_inverted = (10^1.5).^(1 + log10(log_line(40))/log10(10^1.5) - log10(log_line)/log10(10^1.5));

1 个答案:

答案 0 :(得分:1)

要在对数轴上执行描述为线性运算的变换,请对值的对数执行这些线性变换,然后重新应用取幂。所以1):

log_line_offset = 10.^(log10(log_line) + 1-log10(log_line(20)));

对于2):

log_line_offset_inverted = 10.^(2*log10(log_line_offset(20)) - log10(log_line_offset));

或:

log_line_offset_inverted = 10.^(1 + log10(log_line(20)) - log10(log_line));

然后可以用semilogy以相同的方式绘制这些:

semilogy(all_x,log_line,all_x, log_line_offset, all_x,log_line_offset_inverted)

Result

我无法保证这对于您正在创建这些图及其基础数据的应用程序来说是一个明智的解决方案。这似乎是描述问题的一种奇怪方式,因此您可能最好在计算链上进一步创建这些偏移。

例如,log_line_offset可以使用原始代码轻松计算,但x值为[20 50],但这是否是一种有意义的方式来处理数据可能取决于关于它应该代表什么。