Python ';日志';和';symlog';?

Python ';日志';和';symlog';?,python,matplotlib,scale,logarithm,Python,Matplotlib,Scale,Logarithm,在中,我可以使用或设置轴缩放。这两个函数都接受三种不同的刻度:'linear'|'log'|'symlog' 'log'和'symlog'之间有什么区别?在我做的一个简单测试中,他们看起来完全一样 我知道文档上说它们接受不同的参数,但我仍然不理解它们之间的区别。有人能解释一下吗?答案将是最好的,如果它有一些示例代码和图形!(还有:名称“symlog”从何而来?symlog类似于log,但允许您定义一个接近零的值范围,在该范围内,绘图是线性的,以避免绘图在零附近变为无穷大 从 在对数图中,你永远不

在中,我可以使用或设置轴缩放。这两个函数都接受三种不同的刻度:
'linear'
|
'log'
|
'symlog'

'log'
'symlog'
之间有什么区别?在我做的一个简单测试中,他们看起来完全一样


我知道文档上说它们接受不同的参数,但我仍然不理解它们之间的区别。有人能解释一下吗?答案将是最好的,如果它有一些示例代码和图形!(还有:名称“symlog”从何而来?

symlog类似于log,但允许您定义一个接近零的值范围,在该范围内,绘图是线性的,以避免绘图在零附近变为无穷大

在对数图中,你永远不会有一个零值,如果你有一个接近零的值,它会从你的图的底部向下尖峰(无限向下),因为当你取“log(接近零)”时,你会得到“接近负无穷大”


symlog可以帮助您解决需要使用日志图的情况,但有时该值可能会下降到零,但您仍然希望能够以有意义的方式在图上显示该值。如果你需要symlog,你会知道的。

我终于找到时间做了一些实验,以了解它们之间的区别。以下是我的发现:

  • log
    仅允许正值,并允许您选择如何处理负值(
    mask
    clip
  • symlog
    表示对称对数,允许正值和负值
  • symlog
    允许在绘图中设置零附近的范围将是线性的,而不是对数的
我认为通过图形和示例,一切都会变得更容易理解,所以让我们尝试一下:

import numpy
from matplotlib import pyplot

# Enable interactive mode
pyplot.ion()

# Draw the grid lines
pyplot.grid(True)

# Numbers from -50 to 50, with 0.1 as step
xdomain = numpy.arange(-50,50, 0.1)

# Plots a simple linear function 'f(x) = x'
pyplot.plot(xdomain, xdomain)
# Plots 'sin(x)'
pyplot.plot(xdomain, numpy.sin(xdomain))

# 'linear' is the default mode, so this next line is redundant:
pyplot.xscale('linear')

为了完整起见,我使用以下代码保存每个数字:

# Default dpi is 80
pyplot.savefig('matplotlib_xscale_linear.png', dpi=50, bbox_inches='tight')
请记住,您可以使用以下方法更改体形大小:

fig = pyplot.gcf()
fig.set_size_inches([4., 3.])
# Default size: [8., 6.]

(如果您不确定我是否要回答自己的问题,请阅读)

以下是一个需要symlog时的行为示例:

初始绘图,未缩放。注意有多少点聚集在x~0处

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')
[ "

对数比例绘图。所有内容都崩溃了。

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.set(xlabel='Score, log', ylabel='Total Amount Deposited, log')
    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('symlog')
    ax.set_yscale('symlog')
    ax.set(xlabel='Score, symlog', ylabel='Total Amount Deposited, symlog')
"

为什么会崩溃?因为x轴上的一些值非常接近或等于0

Symlog缩放图。一切正常。

    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.set(xlabel='Score, log', ylabel='Total Amount Deposited, log')
    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('symlog')
    ax.set_yscale('symlog')
    ax.set(xlabel='Score, symlog', ylabel='Total Amount Deposited, symlog')

嗯……我读到了,但我仍然不知道什么时候应该使用这两种方法。我希望能有一些图形化的例子,这样我才能真正了解symlog试图解决的问题是什么。
    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('log')
    ax.set_yscale('log')
    ax.set(xlabel='Score, log', ylabel='Total Amount Deposited, log')
    ax = sns.scatterplot(x= 'Score', y ='Total Amount Deposited', data = df, hue = 'Predicted Category')

    ax.set_xscale('symlog')
    ax.set_yscale('symlog')
    ax.set(xlabel='Score, symlog', ylabel='Total Amount Deposited, symlog')