用matplotlib在半对数图上绘制直线

2024-06-01 01:02:11 发布

您现在位置:Python中文网/ 问答频道 /正文

enter image description here

严格地说,这不是一个符号学情节。我用这段代码得到一个对数y-axis

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

编辑:好吧,也许我把它简化得太多了。我需要画直线,从x轴到45度角。与图像中的直线相似,但实际上是笔直且呈45度角。我还需要根据x值的y值来改变x值。

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

我的教育水平很低,所以前几天我不得不自学对数,因为我从未在学校学过。所以我没办法自己画直线。


Tags: 代码图像log编辑绘制对数直线set
1条回答
网友
1楼 · 发布于 2024-06-01 01:02:11

好吧,就用我目前所知道的来回答这个问题。

为了在半对数上画一条直线,主要有两种方法。如果您有一个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

现在,在偏斜t的情况下,还有更多的工作要做。当生成一个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

相关问题 更多 >