Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Matplotlib中为小于1的值设置日志比例_Python_Matplotlib - Fatal编程技术网

Python 如何在Matplotlib中为小于1的值设置日志比例

Python 如何在Matplotlib中为小于1的值设置日志比例,python,matplotlib,Python,Matplotlib,我使用matplot lib绘制以下数据: x_val = [-(2**24), -(2**23), -(2**22), -2(21)] y_val = [-1/2, -1/4, -1/8, -1/16] I数据关系是线性的,但由于阶跃模式,我想对图形的x轴和y轴使用对数刻度,基数为2 问题是y值为负值,介于0和-1之间。这意味着我不能使用symlog,因为它对小于10的值使用线性刻度。我想知道是否有另一种方法来缩放轴,从而给出十进制数的对数。这是我目前的代码: ax1.set_xscale(

我使用matplot lib绘制以下数据:

x_val = [-(2**24), -(2**23), -(2**22), -2(21)]
y_val = [-1/2, -1/4, -1/8, -1/16]
I数据关系是线性的,但由于阶跃模式,我想对图形的x轴和y轴使用对数刻度,基数为2

问题是y值为负值,介于0和-1之间。这意味着我不能使用
symlog
,因为它对小于10的值使用线性刻度。我想知道是否有另一种方法来缩放轴,从而给出十进制数的对数。这是我目前的代码:

ax1.set_xscale('symlog', basex=2)
ax1.set_yscale('symlog', nonposy='clip')

您可以使用x轴上的
linthresh
(或
linthreshx
)更改比例变为线性的值。有关更多信息,请参阅文档

下面是一个示例,将其更改为0.01,将数据绘制为直线:

import matplotlib.pyplot as plt

x_val = [-(2**24), -(2**23), -(2**22), -(2**21)]
y_val = [-1./2., -1./4., -1./8., -1./16.]

fig,ax1 = plt.subplots(1)

ax1.plot(x_val,y_val,'bo-')

ax1.set_xscale('symlog', basex=2)
ax1.set_yscale('symlog', nonposy='clip', linthreshy=0.01)

plt.show()