当前位置: 首页 > 面试题库 >

Matplotlib:使用与以前的轴相同的参数添加轴

姬昊焱
2023-03-14
问题内容

我想在两个不同的子图中绘制数据。绘制后,我想回到第一个子图并在其中绘制另一个数据集。但是,这样做时会收到以下警告:

MatplotlibDeprecationWarning:当前使用与以前的轴相同的参数添加轴现在会重用之前的实例。在将来的版本中,将始终创建并返回一个新实例。同时,通过向每个轴实例传递唯一的标签,可以抑制此警告,并确保将来的行为。warnings.warn(消息,mplDeprecation,stacklevel
= 1)

我可以用一段简单的代码来重现它:

import matplotlib.pyplot as plt
import numpy as np

# Generate random data
data = np.random.rand(100)

# Plot in different subplots
plt.figure()
plt.subplot(1, 2, 1)
plt.plot(data)

plt.subplot(1, 2, 2)
plt.plot(data)

plt.subplot(1, 2, 1) # Warning occurs here
plt.plot(data + 1)

关于如何避免此警告的任何想法?我使用matplotlib
2.1.0。看起来像这里一样的问题


问题答案:

这是一个很好的例子,示出了使用受益matplotlib面向对象的API。

import numpy as np
import matplotlib.pyplot as plt

# Generate random data
data = np.random.rand(100)

# Plot in different subplots
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.plot(data)

ax2.plot(data)

ax1.plot(data+1)

plt.show()

注意: 将变量名以小写字母开头(例如,data = ...而不是Data = ...查看PEP8)更像是Pythonic



 类似资料:
  • 我需要填写时间偏移的方法,但使用类名作为参数名,我不知道如何做到这一点我已经尝试将变量添加在一起,但我得到错误说"你不能将时间转换为int" 所以我不知道该怎么办,请尽快回复谢谢! 错误类型:

  • 问题内容: 我想在一个子图中绘制阻尼随机游走的时间序列,然后在第二个子图中放大它。我从matplotlib知道,效果很好。到目前为止,我的代码是: 这将创建如下图: 这几乎是我想要的,除了连接2个子图的线从第一个子图中的框的上边缘开始。是否有可能从第二个子图中的较低的两个边缘开始,而仍然在第二个子图中的较高的两个边缘处结束呢?我要怎么做才能做到这一点? 问题答案: 在有两个参数,并设置两个连接器的

  • 问题内容: 有没有一种方法可以使存根方法在后续调用中返回不同的对象?我想这样做是为了测试来自的不确定响应。即,不管方法的返回顺序如何进行测试,结果都保持恒定。 我要测试的代码看起来像这样。 问题答案: 你可以使用方法来做到这一点(与链接时): 或使用等效的静态doAnswer方法:

  • 问题内容: 是否可以在向其添加一些参数数据的同时将请求转发给另一个控制器?我尝试添加到ModelMap中,但是它似乎不存在问题。我正在做类似的事情: 我能想到的唯一其他方法是将参数放在会话上,然后将其弹出目标控制器。 问题答案: 最简单的方法是将数据添加到请求中。 由于这是转发,因此将相同的请求传递到服务器内的不同处理程序。 作为示例,让我们从两个控制器的简单设置开始,一个转发到另一个: 添加数据

  • 问题内容: 我已经成功地增加了ticklabels的字体,但是现在它们离轴太近了。我想在刻度标签和轴之间添加一点呼吸空间。 问题答案: 看起来matplotlib将这些设置视为rcParams: 在 创建任何图形 之前先进行 设置, 然后就 可以了。 我看过源代码,似乎没有其他方法可以通过编程设置它们。(tick.set_pad()看起来像是试图做正确的事,但是似乎在构建Ticks时设置了填充,此

  • 问题内容: 我在同一张图上绘制了多个seaborn点图。x轴是序数,而不是数字。每个点图的序数值都相同。我想将每个图稍微移到一边,pointplot(dodge = …)参数的方式是在单个图内的多条线内进行,但是在这种情况下,是要在彼此之上绘制多个不同图。我怎样才能做到这一点? 理想情况下,我想要一种适用于任何matplotlib图的技术,而不仅仅是专门针对海洋的技术。由于数据不是数字,因此很难为