简体   繁体   English

删除 python 中绘制的 function

[英]Delete plotted function in python

The problem is that as soon as I set a new function on the slider, the old functions are not deleted but are still displayed.问题是只要我在slider上设置一个新的function,旧的功能并没有被删除,但仍然显示。 I tried to delete the previous function with clf and cla, but then the coordinate system is no longer displayed (here ist the link of the website for clf and cla https://www.activestate.com/resources/quick-reads/how-to-clear-a-plot-in-python/ ).我试图用clf和cla删除之前的function,但是坐标系不再显示(这里是clf和cla https的网站链接://www.activestate.com/resources/quick-reads/how -to-clear-a-plot-in-python/ )。 thank you for the answers谢谢你的回答

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons

# Select length of axes and the space between tick labels
xmin, xmax, ymin, ymax = -5, 5, -5, 5
ticks_frequency = 1

# Plot points
fig, ax = plt.subplots(figsize=(10, 10))

#////////////////////////////////////////////////////////////////////////////// 

# x range
x = np.arange(-5, 5., 0.025)

# start value
m1 = 1
t1 = 0
m2 = 1
t2 = 0

# Define the sliders position
ax_m1 = plt.axes([0.2, 0.075, 0.25, 0.03],)
ax_t1 = plt.axes([0.2, 0.125, 0.25, 0.03],)

ax_m2 = plt.axes([0.55, 0.075, 0.25, 0.03],)
ax_t2 = plt.axes([0.55, 0.125, 0.25, 0.03],)

# Define Slider value
mSlider1 = Slider(ax_m1, 'm1', -5.0, 5.0, valinit=m1, valstep=.01)
tSlider1 = Slider(ax_t1, 't1', -5.0, 5.0, valinit=t1, valstep=.01)

mSlider2 = Slider(ax_m2, 'm2', -5.0, 5.0, valinit=m2, valstep=.01)
tSlider2 = Slider(ax_t2, 't2', -5.0, 5.0, valinit=t2, valstep=.01)



#//////////////////////////////////////////////////////////////////////////////update

def update_m1(mSlider1):
    global m1
    m1 = mSlider1
    
def update_t1(tSlider1):
    global t1
    t1 = tSlider1
    
def update_m2(mSlider2):
    global m2
    m2 = mSlider2
    
def update_t2(tSlider2):
    global t2
    t2 = tSlider2

def update_f1(y1):
    y1 = m1*x + t1
    ax.plot(x, y1, lw = 3, alpha = 0.5, color="blue")

def update_f2(y2):
    y2 = m2*x + t2
    ax.plot(x, y2, lw = 3, alpha = 1, color = "orange")


mSlider1.on_changed(update_m1,)
tSlider1.on_changed(update_t1,)

mSlider1.on_changed(update_f1,)
tSlider1.on_changed(update_f1,)

mSlider2.on_changed(update_m2,)
tSlider2.on_changed(update_t2,)

mSlider2.on_changed(update_f2,)
tSlider2.on_changed(update_f2,)

#//////////////////////////////////////////////////////////////////////////////

# Set identical scales for both axes
ax.set(xlim=(xmin-1, xmax+1), ylim=(ymin-1, ymax+1), aspect='equal')

# Set bottom and left spines as x and y axes of coordinate system
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')

# Remove top and right spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# Create 'x' and 'y' labels placed at the end of the axes
ax.set_xlabel('x', size=14, labelpad=-24, x=1.03)
ax.set_ylabel('y', size=14, labelpad=-21, y=1.02, rotation=0)

# Create custom major ticks to determine position of tick labels
x_ticks = np.arange(xmin, xmax+1, ticks_frequency)
y_ticks = np.arange(ymin, ymax+1, ticks_frequency)
ax.set_xticks(x_ticks[x_ticks != 0])
ax.set_yticks(y_ticks[y_ticks != 0])

# Create minor ticks placed at each integer to enable drawing of minor grid
# lines: note that this has no effect in this example with ticks_frequency=1
ax.set_xticks(np.arange(xmin, xmax+1), minor=True)
ax.set_yticks(np.arange(ymin, ymax+1), minor=True)

# Draw major and minor grid lines
ax.grid(which='both', color='grey', linewidth=1, linestyle='-', alpha=0.2)

# Draw arrows
arrow_fmt = dict(markersize=4, color='black', clip_on=False)
ax.plot((1), (0), marker='>', transform=ax.get_yaxis_transform(), **arrow_fmt)
ax.plot((0), (1), marker='^', transform=ax.get_xaxis_transform(), **arrow_fmt)

plt.show()
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, RadioButtons

# Select length of axes and the space between tick labels
xmin, xmax, ymin, ymax = -5, 5, -5, 5
ticks_frequency = 1

# Plot points
fig, ax = plt.subplots(figsize=(10, 10))

#////////////////////////////////////////////////////////////////////////////// 

# x range
x = np.arange(-5, 5., 0.025)

# start value
m1 = 1
t1 = 0
m2 = 1
t2 = 0

# Define the sliders position
ax_m1 = plt.axes([0.2, 0.075, 0.25, 0.03],)
ax_t1 = plt.axes([0.2, 0.125, 0.25, 0.03],)

ax_m2 = plt.axes([0.55, 0.075, 0.25, 0.03],)
ax_t2 = plt.axes([0.55, 0.125, 0.25, 0.03],)

# Define Slider value
mSlider1 = Slider(ax_m1, 'm1', -5.0, 5.0, valinit=m1, valstep=.01)
tSlider1 = Slider(ax_t1, 't1', -5.0, 5.0, valinit=t1, valstep=.01)

mSlider2 = Slider(ax_m2, 'm2', -5.0, 5.0, valinit=m2, valstep=.01)
tSlider2 = Slider(ax_t2, 't2', -5.0, 5.0, valinit=t2, valstep=.01)



#//////////////////////////////////////////////////////////////////////////////update

y1 = m1*x + t1
a1 = ax.plot(x, y1, lw = 3, alpha = 0.5, color="blue")

y2 = m2*x + t2
a2 = ax.plot(x, y2, lw = 3, alpha = 1, color = "orange")


def update_m1(mSlider1):
    global m1
    m1 = mSlider1
    
def update_t1(tSlider1):
    global t1
    t1 = tSlider1
    
def update_m2(mSlider2):
    global m2
    m2 = mSlider2
    
def update_t2(tSlider2):
    global t2
    t2 = tSlider2

def update_f1(y1):
    global a1
    line = a1.pop(0)
    line.remove()
    y1 = m1*x + t1
    a1 = ax.plot(x, y1, lw = 3, alpha = 0.5, color="blue")

def update_f2(y2):
    global a2
    line = a2.pop(0)
    line.remove()
    y2 = m2*x + t2
    a2 = ax.plot(x, y2, lw = 3, alpha = 1, color = "orange")


mSlider1.on_changed(update_m1,)
tSlider1.on_changed(update_t1,)

mSlider1.on_changed(update_f1,)
tSlider1.on_changed(update_f1,)

mSlider2.on_changed(update_m2,)
tSlider2.on_changed(update_t2,)

mSlider2.on_changed(update_f2,)
tSlider2.on_changed(update_f2,)

#//////////////////////////////////////////////////////////////////////////////

# Set identical scales for both axes
ax.set(xlim=(xmin-1, xmax+1), ylim=(ymin-1, ymax+1), aspect='equal')

# Set bottom and left spines as x and y axes of coordinate system
ax.spines['bottom'].set_position('zero')
ax.spines['left'].set_position('zero')

# Remove top and right spines
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)

# Create 'x' and 'y' labels placed at the end of the axes
ax.set_xlabel('x', size=14, labelpad=-24, x=1.03)
ax.set_ylabel('y', size=14, labelpad=-21, y=1.02, rotation=0)

# Create custom major ticks to determine position of tick labels
x_ticks = np.arange(xmin, xmax+1, ticks_frequency)
y_ticks = np.arange(ymin, ymax+1, ticks_frequency)
ax.set_xticks(x_ticks[x_ticks != 0])
ax.set_yticks(y_ticks[y_ticks != 0])

# Create minor ticks placed at each integer to enable drawing of minor grid
# lines: note that this has no effect in this example with ticks_frequency=1
ax.set_xticks(np.arange(xmin, xmax+1), minor=True)
ax.set_yticks(np.arange(ymin, ymax+1), minor=True)

# Draw major and minor grid lines
ax.grid(which='both', color='grey', linewidth=1, linestyle='-', alpha=0.2)

# Draw arrows
arrow_fmt = dict(markersize=4, color='black', clip_on=False)
ax.plot((1), (0), marker='>', transform=ax.get_yaxis_transform(), **arrow_fmt)
ax.plot((0), (1), marker='^', transform=ax.get_xaxis_transform(), **arrow_fmt)

plt.show()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM