我想用matplotlib做一个方形轴散点图。通常使用set_scale("log")
效果很好,但它限制了我的log10。我想用log2做图。我在这里看到了解决方案:How to produce an exponentially scaled axis?
但是它非常复杂,如果你的数组中有0个值,它就不起作用了,我就是这样做的。我想像其他numpy函数一样忽略那些值。
举例来说:
log2scatter(data1, data2)
字符串
当data1和data2包含0时,x和y轴上应该有一个对数刻度,对数间隔刻度。就像log10一样,除了log2.
2条答案
按热度按时间b91juud31#
Matplotlib >= 3.3:
指定
base=2
:字符串
Matplotlib < 3.3:
指定
basex=2
和/或basey=2
作为x轴和y轴。型
x1c 0d1x的数据
对于过零行为,您所指的是“对称对数”图(也称为“symlog”)。无论如何,数据不会被过滤掉,它只是一个接近0的线性图和其他地方的对数图。改变的是尺度,而不是数据。
通常情况下,您只需执行
ax.set_xscale('symlog', basex=2)
,但使用非10的基数在目前的symlog图中似乎存在错误。编辑:嘿!这个bug似乎是由于一个经典的错误:使用了一个可变的默认参数。
我已经提交了一个bug报告,但是如果你想修复它,你需要在
SymmetricalLogLocator
的__init__
方法的第1376行附近对lib/matplotlib/ticker.py
做一个小的编辑。而不是
型
将其更改为类似于:
型
进行了更改后,它的行为符合预期...
型
的
drkbr07n2#
如果你使用
plt.xscale
,你仍然需要指定basex
,而不是base
:字符串