为什么 Pandas throw 'NoneType' object is not callable during plotting?

Why does Pandas throw 'NoneType' object is not callable during plotting?

我有Pandas个系列:

results
Out[75]: 
job_id            
294     PASSED        115
        FAILED          1
        FIXED           0
        Failed          0
        REGRESSION      0
        SKIPPED         0
295     PASSED        191
        FAILED          0
        FIXED           0
        Failed          0
        REGRESSION      0
        SKIPPED         0
296     PASSED        191
        REGRESSION      1
        FAILED          0
        FIXED           0
        Failed          0
        SKIPPED         0
297     PASSED        268
        SKIPPED        11
        FAILED          7
        FIXED           1
        REGRESSION      1
        Failed          0
298     PASSED        189
        REGRESSION      2
        FAILED          1
        FIXED           1
        Failed          0
        SKIPPED         0
299     PASSED        266
        SKIPPED        11
        FAILED          9
        FIXED           2
        REGRESSION      2
        Failed          0
303     PASSED        190
        FIXED           2
        FAILED          0
        Failed          0
        REGRESSION      0
        SKIPPED         0
305     PASSED        192
        FAILED          0
        FIXED           0
        Failed          0
        REGRESSION      0
        SKIPPED         0
307     PASSED        192
        FAILED          0
        FIXED           0
        Failed          0
        REGRESSION      0
        SKIPPED         0
309     PASSED        192
        FAILED          0
        FIXED           0
        Failed          0
        REGRESSION      0
        SKIPPED         0
Name: result, dtype: int64

当我尝试绘制它时:

results.plot(kind="line")

我收到

Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 384, in __new__
    dtype = numeric.dtype(dtype)
TypeError: 'NoneType' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\IPython\core\interactiveshell.py", line 3251, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-78-2d999262e4ca>", line 1, in <module>
    results.plot(kind="line")
  File "C:\Python310\lib\site-packages\pandas\plotting\_core.py", line 972, in __call__
    return plot_backend.plot(data, kind=kind, **kwargs)
  File "C:\Python310\lib\site-packages\pandas\plotting\_matplotlib\__init__.py", line 71, in plot
    plot_obj.generate()
  File "C:\Python310\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 294, in generate
    self._post_plot_logic_common(ax, self.data)
  File "C:\Python310\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 473, in _post_plot_logic_common
    self._apply_axis_properties(ax.xaxis, rot=self.rot, fontsize=self.fontsize)
  File "C:\Python310\lib\site-packages\pandas\plotting\_matplotlib\core.py", line 561, in _apply_axis_properties
    labels = axis.get_majorticklabels() + axis.get_minorticklabels()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1201, in get_majorticklabels
    ticks = self.get_major_ticks()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1371, in get_major_ticks
    numticks = len(self.get_majorticklocs())
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1277, in get_majorticklocs
    return self.major.locator()
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 2113, in __call__
    vmin, vmax = self.axis.get_view_interval()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1987, in getter
    return getattr(getattr(self.axes, lim_name), attr_name)
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 781, in viewLim
    self._unstale_viewLim()
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 776, in _unstale_viewLim
    self.autoscale_view(**{f"scale{name}": scale
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 2932, in autoscale_view
    handle_single_axis(
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 2895, in handle_single_axis
    x0, x1 = locator.nonsingular(x0, x1)
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 1654, in nonsingular
    return mtransforms.nonsingular(v0, v1, expander=.05)
  File "C:\Python310\lib\site-packages\matplotlib\transforms.py", line 2880, in nonsingular
    if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 387, in __new__
    dtype = numeric.dtype(type(dtype))
TypeError: 'NoneType' object is not callable
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 384, in __new__
    dtype = numeric.dtype(dtype)
TypeError: 'NoneType' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:\Python310\lib\tkinter\__init__.py", line 839, in callit
    func(*args)
  File "C:\Python310\lib\site-packages\matplotlib\backends\_backend_tk.py", line 251, in idle_draw
    self.draw()
  File "C:\Python310\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 9, in draw
    super().draw()
  File "C:\Python310\lib\site-packages\matplotlib\backends\backend_agg.py", line 436, in draw
    self.figure.draw(self.renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 73, in draw_wrapper
    result = draw(artist, renderer, *args, **kwargs)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\figure.py", line 2810, in draw
    mimage._draw_list_compositing_images(
  File "C:\Python310\lib\site-packages\matplotlib\image.py", line 132, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 3082, in draw
    mimage._draw_list_compositing_images(
  File "C:\Python310\lib\site-packages\matplotlib\image.py", line 132, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1158, in draw
    ticks_to_draw = self._update_ticks()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1045, in _update_ticks
    major_locs = self.get_majorticklocs()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1277, in get_majorticklocs
    return self.major.locator()
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 2114, in __call__
    return self.tick_values(vmin, vmax)
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 2120, in tick_values
    vmin, vmax = mtransforms.nonsingular(
  File "C:\Python310\lib\site-packages\matplotlib\transforms.py", line 2880, in nonsingular
    if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 387, in __new__
    dtype = numeric.dtype(type(dtype))
TypeError: 'NoneType' object is not callable
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 384, in __new__
    dtype = numeric.dtype(dtype)
TypeError: 'NoneType' object is not callable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
  File "C:\Python310\lib\tkinter\__init__.py", line 839, in callit
    func(*args)
  File "C:\Python310\lib\site-packages\matplotlib\backends\_backend_tk.py", line 251, in idle_draw
    self.draw()
  File "C:\Python310\lib\site-packages\matplotlib\backends\backend_tkagg.py", line 9, in draw
    super().draw()
  File "C:\Python310\lib\site-packages\matplotlib\backends\backend_agg.py", line 436, in draw
    self.figure.draw(self.renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 73, in draw_wrapper
    result = draw(artist, renderer, *args, **kwargs)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\figure.py", line 2810, in draw
    mimage._draw_list_compositing_images(
  File "C:\Python310\lib\site-packages\matplotlib\image.py", line 132, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\axes\_base.py", line 3082, in draw
    mimage._draw_list_compositing_images(
  File "C:\Python310\lib\site-packages\matplotlib\image.py", line 132, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Python310\lib\site-packages\matplotlib\artist.py", line 50, in draw_wrapper
    return draw(artist, renderer)
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1158, in draw
    ticks_to_draw = self._update_ticks()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1045, in _update_ticks
    major_locs = self.get_majorticklocs()
  File "C:\Python310\lib\site-packages\matplotlib\axis.py", line 1277, in get_majorticklocs
    return self.major.locator()
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 2114, in __call__
    return self.tick_values(vmin, vmax)
  File "C:\Python310\lib\site-packages\matplotlib\ticker.py", line 2120, in tick_values
    vmin, vmax = mtransforms.nonsingular(
  File "C:\Python310\lib\site-packages\matplotlib\transforms.py", line 2880, in nonsingular
    if maxabsvalue < (1e6 / tiny) * np.finfo(float).tiny:
  File "C:\Python310\lib\site-packages\numpy\core\getlimits.py", line 387, in __new__
    dtype = numeric.dtype(type(dtype))
TypeError: 'NoneType' object is not callable

我想绘制此图以将作业执行与堆积条形图进行比较,以可视化结果中的任何问题。

我假设您想制作以下内容:

下面是生成上述情节的完全可重现的 Python 脚本。

import matplotlib.pyplot as plt
import pandas as pd


result_types = ["PASSED", "FAILED", "FIXED", "Failed", "REGRESSION", "SKIPPED"]

# this seems to be your data format exactly
results = pd.DataFrame(
    {
        "job_id": [294] * 6 + [295] * 6 + [296] * 6,
        "": [115, 1, 0, 0, 0, 0, 191, 0, 0, 0, 0, 0, 191, 1, 0, 0, 0, 0],
    },
).set_index(["job_id", pd.Index(result_types * 3)])

results = results.reset_index(-1).pivot(columns="level_1").droplevel(0, axis=1)
results.columns = results.columns.rename("counts")

results[result_types].plot(kind="bar", stacked="True")
plt.show()