python 双误差棒(上下误差棒)主刻度 副刻度

COM_PowerSpect_CMB-TT-full_R3.01.txt

此来自https://pla.esac.esa.int/#cosmology,CMB角功率谱 为程序所需要的数据

立即下载

先上图
在这里插入图片描述
直接上代码:

import sys, platform, os, math
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
import camb
from camb import model, initialpower
from matplotlib.ticker import MultipleLocator,FuncFormatter
plt.rcParams['xtick.direction'] = 'in'
plt.rcParams['ytick.direction'] = 'in'

pars = camb.CAMBparams()
pars.set_cosmology(H0=67.5, ombh2=0.022, omch2=0.122, mnu=0.06, omk=0, tau=0.06)
pars.InitPower.set_params(As=2e-9, ns=0.965, r=0)
pars.set_for_lmax(2500, lens_potential_accuracy=0);

results = camb.get_results(pars)

powers =results.get_cmb_power_spectra(pars, CMB_unit='muK')
totCL=powers['total']
unlensedCL=powers['unlensed_scalar']

ls = np.arange(totCL.shape[0])

data = np.loadtxt('COM_PowerSpect_CMB-TT-full_R3.01.txt')
data_ls = data.T[0]; data_CL = data.T[1]
data_error = [data.T[2], data.T[3]]

fig,ax=plt.subplots(figsize=(8,4))
lmax = 100; clmax = np.max(data_CL[0:lmax]+data.T[3][0:lmax])
if math.modf(clmax/1000)[0] > 0.5:
    clmax = (int(clmax//1000)+1)*1000
else:
    clmax = (int(clmax/1000)+0.5)*1000

plt.scatter(ls[2:2501],totCL[:,0][2:2501],color='blue',marker='s',s=5)
plt.errorbar(data_ls,data_CL,marker='o',markersize=5,color='magenta',yerr=data_error,fmt='o',ecolor='magenta',elinewidth=1.5,capsize=3,barsabove=True)
plt.xlim(1,lmax); plt.ylim(0,clmax)
plt.xlabel('$l$'); plt.ylabel('$D_l^{TT}[\mu k^2]$')
plt.xticks(np.append(np.arange(0,lmax,lmax/5),lmax)); plt.yticks(np.append(np.arange(0,clmax,500),clmax))
ax.xaxis.set_minor_locator(MultipleLocator(lmax/25)); ax.yaxis.set_minor_locator(MultipleLocator(100))
plt.show()

说明:

  • 两个数据,一个是从Planck Legacy Archive(PLA)下载了CMB角功率谱(plt.errorbar画出),另外一个是CAMB理论计算出角功率谱(plt.scatter画出)。
  • 可自动设置主刻度和副刻度,横坐标主刻度控制在5个,每个主刻度有5个副刻度;纵坐标每500个值一个主刻度,每个主刻度有5个副刻度。
发布了9 篇原创文章 · 获赞 0 · 访问量 1044
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览