用matplotlib在semilog图上绘制直线

时间:2012-12-02 03:43:51

标签: python matplotlib

enter image description here

严格来说,这不是半原始情节。我使用此代码获得对数y-axis

pyplot.gca().set_yscale('log')

编辑:好吧,也许我太过分了。我需要从x轴以45度角绘制直线。类似于图像中的线条,但实际上笔直且呈45度角。我还需要根据其y值移动任何x值。

在45度角绘制已知y值和未知x值的直线的公式是什么? (也许数学论坛会更合适?)

我的教育水平相当低,所以例如我不得不教会自己前几天的对数,因为我从未在学校里学过。所以我无法找到一种自己绘制直线的方法。

1 个答案:

答案 0 :(得分:2)

好的,我要用迄今为止我想到的问题回答这个问题。

为了在semilog上绘制直线,有两种主要方法。如果你有一个x值列表,并希望得到相应的y值,它们将绘制一条直线,那么你只需在每个x值上调用numpy.exp()。

import matplotlib.pyplot as plt
import numpy as np

plt.gca().set_yscale('log')

x = np.arange(0, 51, 10)
y = np.exp(x)

plt.plot(x, y, 'k-')
plt.show()

这是一些证明。

enter image description here

如果要绘制具有已知y值和未知x值的直线,请执行相反的操作。

import matplotlib.pyplot as plt
import numpy as np

plt.gca().set_yscale('log')

y = np.arange(0, 1001, 100)
x = np.log(y)

plt.plot(x, y, 'k-')
plt.show()

这里有更多证据。

enter image description here

现在,在偏斜的背景下,还有更多工作要做。生成skew-t时,您需要同时使用已知的y值和已知的x值。这是一个示例函数,它接受温度(x值)和电平(y值)并返回适当倾斜的x值。

def get_skewed_x(level, temp):
    base_log = (-30 * np.log(1000))
    top_log = (-30 * np.log(level))
    diff = base_log - temp
    x = top_log - diff
    return x

该函数接受应绘制数据的级别和温度值。

这个函数看起来相当复杂,但那是因为当你通过在y值上调用np.log()在semilog上创建一条直线时,x值将偏离它所需的位置。因此,您需要找到值实际位置与应该位置之间的差异。无论您在哪个级别绘制数据,您都知道它应该在最低级别绘制的位置,因此您必须在最低级别找到差异,然后才能在较高级别应用它。

一旦你知道了“偏移”,你只需要补偿所有偏斜x值的差异。这些值乘以-30的原因是特定于应用程序的。此数字需要根据图的y限制和x限制进行更改。

根据情节,np.log(1000)中的“1000”可能也需要更改。这应该是skew-t图中的最低级别(最高y值)。

关键是,如果您知道应该在哪个温度上绘制数据,以及您想要绘制数据的级别,此功能将正确地扭曲该值(当针对您的特定情节调整-30时) 。

要查看该功能的实际应用,以下是在500级绘制温度为10的数据点的样子。

get_skewed_x(500, 10)

蓝点表示数据点的绘制位置。

可能有一个更优雅的解决方案,但这是我现在最好的。

enter image description here