Вы можете сделать что-то вроде этого:
import matplotlib.pyplot as plt
from numpy import *
from scipy.interpolate import *
x= array([13, 15,18,20,25,30])
y= array([2.29E+60, 3.87E+60, 7.12E+60, 1.07E+61, 1.90E+61, 3.34E+61])
y2= 7.0867E+56 * x**3.177
fig, ax = plt.subplots()
plt.xlabel('M/Msun')
plt.ylabel('Average Rate of Nucleosynthesis')
ax.plot(x,y, 'o', color='black')
ax.plot((x),y2,'black')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_yticks([1.00E+60, 1.00E+61, 1.00E+62])
plt.show()

или
import matplotlib
import matplotlib.pyplot as plt
from numpy import *
from scipy.interpolate import *
x= array([13, 15,18,20,25,30])
y= array([2.29E+60, 3.87E+60, 7.12E+60, 1.07E+61, 1.90E+61, 3.34E+61])
y2= 7.0867E+56 * x**3.177
fig, ax = plt.subplots()
plt.xlabel('M/Msun')
plt.ylabel('Average Rate of Nucleosynthesis')
ax.plot(x,y, 'o', color='black')
ax.plot((x),y2,'black')
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_yticks([1.00E+60, 5.00E+60, 1.00E+61, 5.00E+61])
ax.get_yaxis().set_major_formatter(matplotlib.ticker.ScalarFormatter())
plt.show()
, чтобы получить что-то подобное:

Возможно, вы захотите прочитать этот ответ о переполнении стека для получения дополнительной / лучшей информации.