我正在尝试使用 matplotlib 和 numpy 来绘制图表,但不断遇到此错误:
MatplotlibDeprecationWarning: Support for FigureCanvases without a required_interactive_framework attribute was deprecated in Matplotlib 3.6 and will be removed two minor releases later.
plt.plot(cache_sizes, hit_rates[i])
Run Code Online (Sandbox Code Playgroud)
知道如何解决吗?
这是代码:
#!/usr/bin/env python3
import os
import subprocess
import matplotlib.pyplot as plt
import numpy as np
# cache_sizes = np.arange(0, 120, 20)
cache_sizes = np.arange(1, 5)
policies = ["FIFO", "LRU", "OPT", "UNOPT", "RAND", "CLOCK"]
# these were acheived after running `run.sh`
hit_rates = [
# FIFO
[45.03, 83.08, 93.53, 97.42],
# LRU
[45.03, 88.04, 95.20, 98.30],
# OPT
[45.03, 88.46, 96.35, 98.73],
# UNOPT
# NOTE: was unable to finish running this one, as it took too long.
[45.03, None, None, None],
# RAND
[45.03, 82.06, 93.16, 97.36],
# CLOCK
[45.03, 83.59, 94.09, 97.73],
]
for i in range(len(policies)):
plt.plot(cache_sizes, hit_rates[i])
plt.legend(policies)
plt.margins(0)
plt.xticks(cache_sizes, cache_sizes)
plt.xlabel("Cache Size (Blocks)")
plt.ylabel("Hit Rate")
plt.savefig("workload.png", dpi=227)
Run Code Online (Sandbox Code Playgroud)
据我所知,这与您使用的后端以及它如何生成FigureCanvas对象有关。Matplotlib 已弃用,其他一些软件仍在相应更新过程中。遗憾的是,目前它生成的警告对用户不太友好,并且 matplotlib 文档没有提供任何帮助。
我在 PyCharm 中看到此错误,默认情况下它使用自己的内部后端 matplotlib: 'module://backend_interagg'。谷歌提供了很多人们在使用FigureCanvas和 时遇到错误的例子backend_interagg。幸运的是,更新到最新版本的 PyCharm 为我解决了这个问题。
如果您的问题与 PyCharm 无关,那么也许尝试检查您正在使用哪个后端,也许使用不同的后端。
import matplotlib
matplotlib.get_backend()
Run Code Online (Sandbox Code Playgroud)
会显示您正在使用哪个后端
matplotlib.use('')
Run Code Online (Sandbox Code Playgroud)
将为您提供可供尝试的可用后端列表,然后use还允许您选择一个。例如matplotlib.use('GTK3Agg')