Matplotlib,python,如何求一条直线与x轴相交的点
Matplotlib, python, how to find the points where a line cuts the x-axis
我一直在研究一些代码来求解二次方程并将其绘制在图形上,我想在直线与 x 轴的交点处得到一个点,并显示点的坐标在他们下面。
代码现在是这样的:
这就是我想要它做的:
代码如下:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
import math
def int_input(prompt):
while True:
try:
variable_name = int(input(prompt))
return variable_name
except ValueError:
print("Please enter a whole number (in digits)")
def float_input(prompt):
while True:
try:
variable_name = float(input(prompt))
return variable_name
except ValueError:
print("Please enter a numeric value (in digits)")
def yes_input(prompt):
while True:
variable_name = input(prompt).lower()
if variable_name in ["y", "yes"]:
return "yes"
elif variable_name in ["n", "no"]:
return "no"
else:
print("""Please enter either "y" or "n". """)
print("Quadratic Solver")
while True:
print("Input below the values of a, b and c from an equation that is of the form : ax² + bx + c = 0")
a = float_input('a: ')
b = float_input('b: ')
c = float_input('c: ')
# calculate the discriminant
d = (b ** 2) - (4 * a * c)
# find two solutions
try:
solution1 = (-b - math.sqrt(d)) / (2 * a)
except ValueError:
solution1 = "none"
try:
solution2 = (-b + math.sqrt(d)) / (2 * a)
except ValueError:
solution2 = "none"
if solution1 == solution2:
if solution1 == "none":
print("There are no solutions.")
else:
print("There is one solution: x = {0}".format(solution1))
elif solution1 != solution2:
print('There are two solutions, x can be either {0} or {1}'.format(solution1, solution2))
graph = yes_input("Do you want to plot that on a graph? (y/n): ")
if graph == "yes":
x = np.linspace(-6, 6, 50)
fig = plt.figure(figsize=(7, 4))
y4 = a * x ** 2 + b * x + c
plt.plot(x, y4, 'g:', label='Degree 2')
# Add features to our figure
plt.legend()
plt.grid(True, linestyle=':')
plt.xlim([-6, 6])
plt.ylim([-4, 4])
plt.title(f'A graph of {a}x² + {b}x + {c} = 0')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.get_current_fig_manager().window.wm_geometry("+0+0")
fig.canvas.manager.window.attributes('-topmost', 1)
# Show plot
plt.show()
new_question = yes_input('New question? (y/n): ')
if new_question == "no":
break
我正在使用 windows OS 并正在使用 IntelliJ IDEA 编辑我的 python 代码。
要在二次方程的图形中添加点,您可以使用带有圆圈标记的 plt.plot 函数,并使用 plt.text 打印点的坐标。
根据您的代码查看我的解决方案。它不是最干净的,但很容易理解(第 86-96 行)。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
import math
def int_input(prompt):
while True:
try:
variable_name = int(input(prompt))
return variable_name
except ValueError:
print("Please enter a whole number (in digits)")
def float_input(prompt):
while True:
try:
variable_name = float(input(prompt))
return variable_name
except ValueError:
print("Please enter a numeric value (in digits)")
def yes_input(prompt):
while True:
variable_name = input(prompt).lower()
if variable_name in ["y", "yes"]:
return "yes"
elif variable_name in ["n", "no"]:
return "no"
else:
print("""Please enter either "y" or "n". """)
print("Quadratic Solver")
while True:
print("Input below the values of a, b and c from an equation that is of the form : ax² + bx + c = 0")
a = float_input('a: ')
b = float_input('b: ')
c = float_input('c: ')
# calculate the discriminant
d = (b ** 2) - (4 * a * c)
# find two solutions
try:
solution1 = (-b - math.sqrt(d)) / (2 * a)
except ValueError:
solution1 = "none"
try:
solution2 = (-b + math.sqrt(d)) / (2 * a)
except ValueError:
solution2 = "none"
if solution1 == solution2:
if solution1 == "none":
print("There are no solutions.")
else:
print("There is one solution: x = {0}".format(solution1))
elif solution1 != solution2:
print('There are two solutions, x can be either {0} or {1}'.format(solution1, solution2))
graph = yes_input("Do you want to plot that on a graph? (y/n): ")
if graph == "yes":
x = np.linspace(-6, 6, 50)
fig = plt.figure(figsize=(7, 4))
y4 = a * x ** 2 + b * x + c
plt.plot(x, y4, 'g:', label='Degree 2')
# Add features to our figure
plt.legend()
plt.grid(True, linestyle=':')
plt.xlim([-6, 6])
plt.ylim([-4, 4])
# Add dots
offset = 0.3
if solution1 == solution2:
if solution1 != "none":
plt.plot(solution1, 0 , marker="o", markersize=10, color="black", linestyle="None")
plt.text(solution1, 0-offset, f'({solution1}, {0})', ha='center', va='center')
elif solution1 != solution2:
plt.plot([solution1, solution2], [0, 0], marker="o", markersize=10, color="black", linestyle="None")
plt.text(solution1, 0-offset, f'({solution1}, {0})', ha='center', va='center')
plt.text(solution2, 0-offset, f'({solution2}, {0})', ha='center', va='center')
plt.title(f'A graph of {a}x² + {b}x + {c} = 0')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.get_current_fig_manager().window.wm_geometry("+0+0")
fig.canvas.manager.window.attributes('-topmost', 1)
# Show plot
plt.show()
new_question = yes_input('New question? (y/n): ')
if new_question == "no":
break
我一直在研究一些代码来求解二次方程并将其绘制在图形上,我想在直线与 x 轴的交点处得到一个点,并显示点的坐标在他们下面。
代码现在是这样的:
这就是我想要它做的:
代码如下:
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
import math
def int_input(prompt):
while True:
try:
variable_name = int(input(prompt))
return variable_name
except ValueError:
print("Please enter a whole number (in digits)")
def float_input(prompt):
while True:
try:
variable_name = float(input(prompt))
return variable_name
except ValueError:
print("Please enter a numeric value (in digits)")
def yes_input(prompt):
while True:
variable_name = input(prompt).lower()
if variable_name in ["y", "yes"]:
return "yes"
elif variable_name in ["n", "no"]:
return "no"
else:
print("""Please enter either "y" or "n". """)
print("Quadratic Solver")
while True:
print("Input below the values of a, b and c from an equation that is of the form : ax² + bx + c = 0")
a = float_input('a: ')
b = float_input('b: ')
c = float_input('c: ')
# calculate the discriminant
d = (b ** 2) - (4 * a * c)
# find two solutions
try:
solution1 = (-b - math.sqrt(d)) / (2 * a)
except ValueError:
solution1 = "none"
try:
solution2 = (-b + math.sqrt(d)) / (2 * a)
except ValueError:
solution2 = "none"
if solution1 == solution2:
if solution1 == "none":
print("There are no solutions.")
else:
print("There is one solution: x = {0}".format(solution1))
elif solution1 != solution2:
print('There are two solutions, x can be either {0} or {1}'.format(solution1, solution2))
graph = yes_input("Do you want to plot that on a graph? (y/n): ")
if graph == "yes":
x = np.linspace(-6, 6, 50)
fig = plt.figure(figsize=(7, 4))
y4 = a * x ** 2 + b * x + c
plt.plot(x, y4, 'g:', label='Degree 2')
# Add features to our figure
plt.legend()
plt.grid(True, linestyle=':')
plt.xlim([-6, 6])
plt.ylim([-4, 4])
plt.title(f'A graph of {a}x² + {b}x + {c} = 0')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.get_current_fig_manager().window.wm_geometry("+0+0")
fig.canvas.manager.window.attributes('-topmost', 1)
# Show plot
plt.show()
new_question = yes_input('New question? (y/n): ')
if new_question == "no":
break
我正在使用 windows OS 并正在使用 IntelliJ IDEA 编辑我的 python 代码。
要在二次方程的图形中添加点,您可以使用带有圆圈标记的 plt.plot 函数,并使用 plt.text 打印点的坐标。
根据您的代码查看我的解决方案。它不是最干净的,但很容易理解(第 86-96 行)。
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
import math
def int_input(prompt):
while True:
try:
variable_name = int(input(prompt))
return variable_name
except ValueError:
print("Please enter a whole number (in digits)")
def float_input(prompt):
while True:
try:
variable_name = float(input(prompt))
return variable_name
except ValueError:
print("Please enter a numeric value (in digits)")
def yes_input(prompt):
while True:
variable_name = input(prompt).lower()
if variable_name in ["y", "yes"]:
return "yes"
elif variable_name in ["n", "no"]:
return "no"
else:
print("""Please enter either "y" or "n". """)
print("Quadratic Solver")
while True:
print("Input below the values of a, b and c from an equation that is of the form : ax² + bx + c = 0")
a = float_input('a: ')
b = float_input('b: ')
c = float_input('c: ')
# calculate the discriminant
d = (b ** 2) - (4 * a * c)
# find two solutions
try:
solution1 = (-b - math.sqrt(d)) / (2 * a)
except ValueError:
solution1 = "none"
try:
solution2 = (-b + math.sqrt(d)) / (2 * a)
except ValueError:
solution2 = "none"
if solution1 == solution2:
if solution1 == "none":
print("There are no solutions.")
else:
print("There is one solution: x = {0}".format(solution1))
elif solution1 != solution2:
print('There are two solutions, x can be either {0} or {1}'.format(solution1, solution2))
graph = yes_input("Do you want to plot that on a graph? (y/n): ")
if graph == "yes":
x = np.linspace(-6, 6, 50)
fig = plt.figure(figsize=(7, 4))
y4 = a * x ** 2 + b * x + c
plt.plot(x, y4, 'g:', label='Degree 2')
# Add features to our figure
plt.legend()
plt.grid(True, linestyle=':')
plt.xlim([-6, 6])
plt.ylim([-4, 4])
# Add dots
offset = 0.3
if solution1 == solution2:
if solution1 != "none":
plt.plot(solution1, 0 , marker="o", markersize=10, color="black", linestyle="None")
plt.text(solution1, 0-offset, f'({solution1}, {0})', ha='center', va='center')
elif solution1 != solution2:
plt.plot([solution1, solution2], [0, 0], marker="o", markersize=10, color="black", linestyle="None")
plt.text(solution1, 0-offset, f'({solution1}, {0})', ha='center', va='center')
plt.text(solution2, 0-offset, f'({solution2}, {0})', ha='center', va='center')
plt.title(f'A graph of {a}x² + {b}x + {c} = 0')
plt.xlabel('x-axis')
plt.ylabel('y-axis')
plt.get_current_fig_manager().window.wm_geometry("+0+0")
fig.canvas.manager.window.attributes('-topmost', 1)
# Show plot
plt.show()
new_question = yes_input('New question? (y/n): ')
if new_question == "no":
break