我最近开始使用python脚本,但在尝试绘制简单图表时遇到了问题。它应该产生一个莫尔圆,但我肯定错过了一些东西。 这是我目前的剧本:非常感谢任何帮助!
import math
import numpy as np
import matplotlib.pyplot as plt
%pylab inline
# max = maximum principal stress
# min = minimum principal stress
# x_norm = normal stress in x-direction
# y_norm = normal stress in y-direction
# t = shear stress
x_norm = -60
y_norm = 50
t = 50
R = math.sqrt(((x_norm - y_norm)/2)**2 + t**2)
print R
max = (x_norm + y_norm)/2 + R
min = (x_norm + y_norm)/2 - R
print max
print min
theta = 0.5 * math.atan((2*t)/(x_norm - y_norm))
print theta
aver = (x_norm + y_norm)/2
print aver
x = (min, max, x_norm, y_norm)
y = (math.sqrt(((x_norm - y_norm)/2)**2 + t**2))
plt.subplot(1,2,1)
plt.plot(x,y)
plt.show()
我尝试过更改它,但最后一部分出错。
import math
import numpy as np
import matplotlib.pyplot as plt
%pylab inline
# max = maximum principal stress
# min = minimum principal stress
# x_norm = normal stress in x-direction
# y_norm = normal stress in y-direction
# t = shear stress
x_norm = -60
y_norm = 50
t = 50
R = math.sqrt(((x_norm - y_norm)/2)**2 + t**2)
print R
max = (x_norm + y_norm)/2 + R
min = (x_norm + y_norm)/2 - R
print max
print min
theta = 0.5 * math.atan((2*t)/(x_norm - y_norm))
print theta
aver = (x_norm + y_norm)/2
print aver
def circle(x_norm, y_norm, t):
x = (min, max, x_norm, y_norm)
y = (math.sqrt(((x_norm - y_norm)/2)**2 + t**2))
plt.subplot(1,2,1)
plt.plot(x,y)
plt.show()
circle(rad,x,y,np.linspace(-100,100,500))
print("Done")
NameError Traceback (most recent call last)
<ipython-input-5-0b893be1e1e8> in <module>()
35 plt.show()
36
---> 37 circle(rad,x,y,np.linspace(-100,100,500))
38 print("Done")
NameError: name 'x' is not defined
答案 0 :(得分:0)
问题在于x的尺寸为4,y为尺寸1.为了使用 plt.plot ,您必须提供实际的点来绘制圆圈。
有一种更简单的方法来绘制圆圈,这里有一个关于它的线索:plot a circle with pyplot?它显示了如何使用pyplot绘制圆圈。