python - 将图形合二为一
问题描述
我希望这两个单独的情节合二为一。我怎样才能做到这一点 ?这两个图表示列表 dis 中的数字。首先对应于 20,其他对应于 40。类似地,它可以用于各种其他数字。
dis=[20,40]
b=0
f=25/60
time=10
t_i=0.001
mean=0.03
std=0.00666
r=0.2
w=2*np.pi*300/60
v=2*np.pi*r*300/60
avg=0.03
high=2
xm=np.linspace(0,2,500)
ym=high
while b<=len(dis)-1:
n=2*3.14*dis[b]*r/(avg*100)
s=np.random.normal(mean,std,round(n))
fig,ax=plt.subplots(figsize=(12,2))
for i in s:
t=np.arange(0.1,time,t_i)
k=r+i
c=v/k
m=np.sqrt((k**2-(k-0.01)**2)/k)
j=np.arcsin(m)
x=k*(np.sin((c*t)+j))+f*t
y=k*(np.cos((c*t)+j))
ax.set_xlim([0.3,2])
ax.set_ylim([y.min()-0.05,-0.1])
reversed = False
ind0=0
while ind0 < len(x):
ind1 = ind0 + 1
if reversed:
while ind1 < len(x) and x[ind1] <= x[ind1 - 1]:
ind1 += 1
ym = np.minimum(ym, np.interp(xm, x[ind0:ind1][::-1], y[ind0:ind1][::-1], left=high, right=high))
else:
while ind1 < len(x) and x[ind1] >= x[ind1 - 1]:
ind1 += 1
ym=np.minimum(ym, np.interp(xm, x[ind0:ind1], y[ind0:ind1], left=high, right=high))
ind0 = ind1
reversed = not reversed
ax.set_xlabel('x (mm)')
ax.set_ylabel('y (mm)')
ax.plot(xm, ym, color='r', alpha=0.5)
b+=1
解决方案
我假设您想将两条线都绘制到一个绘图区域中。在这种情况下,您应该如下调整您的代码。
请注意,您fig, ax
在 while 循环中创建了新对象,因此每次绘制某些内容时,它都在一个新图形中。相反,您希望在 while 循环之前设置图形和轴,以便继续在同一个图形中添加绘图。实现这一点的最简单的代码调整如下:
# variables left out for brevity
fig, ax = plt.subplots(figsize=(12, 2))
while b<=len(dis)-1:
n=2*3.14*dis[b]*r/(avg*100)
s=np.random.normal(mean,std,round(n))
for i in s:
t=np.arange(0.1,time,t_i)
k=r+i
c=v/k
m=np.sqrt((k**2-(k-0.01)**2)/k)
j=np.arcsin(m)
x=k*(np.sin((c*t)+j))+f*t
y=k*(np.cos((c*t)+j))
ax.set_xlim([0.3,2])
ax.set_ylim([y.min()-0.05,-0.1])
reversed = False
ind0=0
while ind0 < len(x):
ind1 = ind0 + 1
if reversed:
while ind1 < len(x) and x[ind1] <= x[ind1 - 1]:
ind1 += 1
ym = np.minimum(ym, np.interp(xm, x[ind0:ind1][::-1], y[ind0:ind1][::-1], left=high, right=high))
else:
while ind1 < len(x) and x[ind1] >= x[ind1 - 1]:
ind1 += 1
ym=np.minimum(ym, np.interp(xm, x[ind0:ind1], y[ind0:ind1], left=high, right=high))
ind0 = ind1
reversed = not reversed
ax.set_xlabel('x (mm)')
ax.set_ylabel('y (mm)')
ax.plot(xm, ym, color='r', alpha=0.5)
b+=1
这给出了下图:
推荐阅读
- .net - 在 Net.Core 2.1 中使用 SOAP WCF 服务时获取身份验证协商而不是 NTLM
- scala - 如何将多个 Spark 数据帧转换为 Dataset[Map[String, Array]]?
- hibernate - 休眠不生成具有某些列的插入语句
- python-3.x - 聚合物链系统的蒙特卡罗模拟
- reactjs - 如果我想监听元素的 boundingClientRect() 变化,应该在 useEffect 的依赖数组中放入什么?
- c++ - 关于使用传递变量修改类函数调用的初学者问题
- php - 我可以将 domxpath 嵌套类的结果放入带有键 => 值的数组中吗?
- web-scraping - 抓取区分大小写的 URL,但使用 Scrapy 抓取不区分大小写的 URL
- scala - Scala 在 if else 语句中赋值
- r - 对 X 轴值进行排序