Python:如何在特定y值(y = 1)的图形中为线条添加标记?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python:如何在特定y值(y = 1)的图形中为线条添加标记?相关的知识,希望对你有一定的参考价值。

我正在研究一些代码来生成一个显示宇宙演变的数字。 This是我的情节。我希望它在每个线上的点比例因子a = 1(y = 1)。我使用的代码是:

import numpy as np
import matplotlib.pyplot as plt
import scipy as sp
from scipy.integrate import odeint

H = 71
Mpc = 3.085677581e+19
km = 1.0
Gyr= 3.1536e16
H0 = (H * Gyr * km / Mpc)

openlegend = ('$Omega_{0}=0.99$','$Omega_{0}=0.9$','$Omega_{0}=0.7$', '$Omega_{0}=0.5$','$Omega_{0}=0.3$','$Omega_{0}=0.1$')

t_0 = 0.0004
a_0 = 0.001

def Friedmann(a, t):
dadt = H0 * (((omega_m) * a**(-1)) + ((omega_r) * a**(-2)) + ((omega_lambda) * a**2) + (omega_k))**(1./2.)
return dadt

plt.rc('text', usetex=True)
plt.rc('font', family='serif')

omega_m = 0.5
omega_lambda = 0.49
t = np.linspace(t_0, 40, 200)
a = odeint(Friedmann, a_0, t)
plt.plot(t,a)

plt.legend(openlegend)
plt.xlabel("Time/Gyr")
plt.ylabel("Scale factor")
plt.grid(True)
plt.axis([0, 40, 0, 3])
plt.show()

在上面的代码中,我删除了其他4个绘图段,因为这个问题代码太重,但我认为所需的一切都在那里。任何帮助深表感谢。

答案

首先找到相应的t值:

from scipy.optimize import fmin
def testfunc(t):
    return abs(1.0-odeint(Friedmann, a_0, t))

tmin=fmin(testfunc,t_0)

然后在那个地方绘制一个标记:

plt.plot(tmin,odeint(Friedmann,a_0,tmin),'ro')
另一答案

要回答你的第二个问题,请看看:

a = np.sort(np.random.rand(100))*2
print(a)

[ 0.04076413  0.07112053  0.09023507  0.09191885  0.10870836  0.12426541
  0.15729747  0.16440316  0.20495337  0.22365309  0.24789116  0.24872571
  0.25064043  0.35076052  0.40280108  0.40847091  0.41375155  0.41872087
  0.42212211  0.43659979  0.44668006  0.45077655  0.481286    0.48560537
  0.52093186  0.52609924  0.56036436  0.56825814  0.62489957  0.62508836
  0.63732085  0.64103949  0.64947372  0.67048212  0.67637557  0.70392489
  0.70942404  0.72100452  0.75495165  0.7912313   0.79807935  0.80725338
  0.8267592   0.82791651  0.82841211  0.82848251  0.82904787  0.89153547
  0.92865278  0.96317979  0.99453125  1.00568198  1.00616394  1.01079887
  1.05477181  1.07749413  1.09642453  1.11116792  1.11821267  1.11954254
  1.11977944  1.1542566   1.17433921  1.19874957  1.25671437  1.27505726
  1.30764574  1.31788563  1.32370927  1.33032743  1.39506346  1.40655092
  1.40935935  1.42417487  1.45180301  1.47163972  1.57174153  1.59848992
  1.66061794  1.68826849  1.69218186  1.70790405  1.72978585  1.73469934
  1.78886879  1.82761629  1.83104592  1.83245659  1.83909942  1.84631466
  1.84894874  1.86030259  1.8784236   1.88678391  1.92236088  1.94622433
  1.96752263  1.98113385  1.99168009  1.99612737]

i = np.argmax(a>1) # first index giving a[i]>1
# BEWARE THIS WILL RETURN 0 IF NO VALUE IS GREATER THAN 1...
print(a[i])

1.0056819789665188

然后t[i]会给你相应的时间。您也可以使用i = np.argmin(abs(a-1))来获得最接近1的点而不是第一个高于1的点,但我想差异无关紧要。

以上是关于Python:如何在特定y值(y = 1)的图形中为线条添加标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何绘制一个框(或圆圈)以强调 R 中图形的特定区域?

在 Python 中使用 Matplotlib 缩放 y 轴

matlab三维图怎么找到z坐标某值对应的x和y值

如何从python中的图像中获取特定像素(蓝色)的x,y坐标?

如何使用python在一个图形中绘制具有不同日期时间的三个值?

必须指向二维图(x,y)坐标networkx python