在本教程中接收“TypeError: __init__() got an unexpected keyword argument 'basey'”

在过去的一天里,我一直在尝试浏览本教程 ( https://bedapub.github.io/besca/tutorials/scRNAseq_tutorial.html ),并且在运行此部分后不断出现错误:

bc.pl.kp_genes(adata, min_genes=min_genes, ax = ax1)

错误如下:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/miniconda3/lib/python3.9/site-packages/besca/pl/_filter_threshold_plots.py", line 57, in kp_genes
    ax.set_yscale("log", basey=10)
  File "/opt/miniconda3/lib/python3.9/site-packages/matplotlib/axes/_base.py", line 4108, in set_yscale
    ax.yaxis._set_scale(value, **kwargs)
  File "/opt/miniconda3/lib/python3.9/site-packages/matplotlib/axis.py", line 761, in _set_scale
    self._scale = mscale.scale_factory(value, self, **kwargs)
  File "/opt/miniconda3/lib/python3.9/site-packages/matplotlib/scale.py", line 597, in scale_factory
    return scale_cls(axis, **kwargs)
TypeError: __init__() got an unexpected keyword argument 'basey'

有人有什么想法吗?我已经卸载并安装了 matplotlib 以确保它已更新,但这似乎也没有做任何事情。

将不胜感激任何帮助!提前谢谢你,我是初学者!

stack overflow Receiving "TypeError: __init__() got an unexpected keyword argument 'basey'" In this tutorial
原文答案
author avatar

接受的答案

似乎 ax.set_yscale("log", basey=10) 无法识别关键字参数 basey 。如果您要安装旧版本,则此关键字在最新的 matplotlib 版本中已被替换,它应该可以工作:

pip install matplotlib==3.3.4

那么为什么会发生这种情况呢?您正在使用的软件包没有固定特定的依赖项,因此它会安装最新版本的依赖项。如果对更新版本的包有任何 API 更改,则代码会中断 - 确定项目的依赖版本是一种很好的做法。


答案:

作者头像

当我尝试以对数方式缩放绘图的 y 轴时,我遇到了类似的问题。因此基数应该是2。当我尝试base=2而不是basey=2时我成功了。

plt.yscale("log",base=2) 

这也应该适用于最新版本的 matplotlib。

作者头像

我在 Github 和 SO 中查找了具有类似问题的帖子(init 上的“错误”关键字调用),看来您可能需要更新您的 matplotlib:

sudo pip install --upgrade matplotlib # for Linux
sudo pip install matplotlib --upgrade # for Windows
作者头像

我认为是因为版本问题。

在 matplotlib 3.6.0 版本中,“basey”或“susby”等关键字已更改。更多细节可以在 matplotlib.scale.LogScaleyscale 中找到

class matplotlib.scale.LogScale(axis, *, base=10, subs=None, nonpositive='clip')
Bases: ScaleBase
A standard logarithmic scale. Care is taken to only plot positive values.
Parameters:
axisAxis
The axis for the scale.

basefloat, default: 10
The base of the logarithm.

nonpositive{'clip', 'mask'}, default: 'clip'
Determines the behavior for non-positive values. They can either be masked as invalid, or clipped to a very small positive number.

subssequence of int, default: None
Where to place the subticks between each major tick. For example, in a log10 scale, [2, 3, 4, 5, 6, 7, 8, 9] will place 8 logarithmically spaced minor ticks between each major tick.