大家好!我正在使用matplotlib,我有一个随机生成的圆圈。此外,我有按钮,必须在字段中生成新的随机圆圈,但每次按下它,圆圈都会在按钮内生成,但不会在现场生成。请告诉我我做错了什么,我是python的新手(实际上昨天开始学习它)。这是我的代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
plt.subplots_adjust(bottom=0.2)
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
l = plt.scatter(x, y, s=area, c=colors, alpha=0.8)
def gen(event):
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
plt.scatter(x, y, s=area, c=colors, alpha=0.8)
plt.draw()
axgen = plt.axes([0.81, 0.05, 0.1, 0.075])
bgen = Button(axgen, 'Generate')
bgen.on_clicked(gen)
plt.show()
答案 0 :(得分:1)
您需要告诉matplotlib您想使用主图轴来绘制点。通过调用plt.scatter
,您告诉matplotlib使用当前轴,在您的情况下恰好是按钮本身。这是使用显式轴的代码的修改版本:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
l = plt.scatter(x, y, s=area, c=colors, alpha=0.8)
def gen(event):
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
ax.scatter(x, y, s=area, c=colors, alpha=0.8)
fig.canvas.draw()
axgen = plt.axes([0.81, 0.05, 0.1, 0.075])
bgen = Button(axgen, 'Generate')
bgen.on_clicked(gen)
plt.show()
请注意,我还将当前数字实例存储在fig
中,以使用fig.canvas.draw()
更新整个数字。您使用的plt.draw()
也可以使用,但如果您有多个数字,可能会遇到类似的问题。
答案 1 :(得分:1)
一旦有多个轴,跟踪绘制哪些轴是至关重要的。不要使用pyplot命令,而应该坚持使用matplotlib api,明确地绘制到轴上。 ax.scatter()
代替plt.scatter
。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Button
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.2)
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
l = ax.scatter(x, y, s=area, c=colors, alpha=0.8)
def gen(event):
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * 0.2
ax.scatter(x, y, s=area, c=colors, alpha=0.8)
plt.draw()
axgen = plt.axes([0.81, 0.05, 0.1, 0.075])
bgen = Button(axgen, 'Generate')
bgen.on_clicked(gen)
plt.show()