在对数图上设置自定义科学记号y刻度

时间:2020-07-08 15:08:48

标签: python matplotlib

我正在尝试为图块设置自定义刻度,但是我很挣扎,我尝试了其他几个线程的解决方案,但都无济于事:/我需要做两个不同的图块,并且在它们上有一些问题。

我希望有一个自定义的y刻度,它可以执行5x10 ^ -3、2x10 ^ -3、1x10 ^ -3、5x10 ^ -4 ...(1,2,5的倍数,以科学计数法表示)

在两个图上,我似乎都无法修改刻度线。 (我认为第二个情节的问题是,因为未成年人在不可见的地方打了勾,但是即使将它们显示为可见,我也无法对其进行修改)。我将刻度设置为“半成功”的解决方案,这意味着我无法将其设置为科学计数法

enter image description here enter image description here

任何帮助将不胜感激:)

plt.rc('text', usetex=True)  
plt.rc('font', family='serif')  
plt.rcParams['figure.dpi'] = 600
plt.rcParams["figure.figsize"] = (4,2.1)
matplotlib.rcParams.update({'font.size': 13})

plt.plot([100,200 ,300 ,400 ,500 ,1000,1500,2000],[0.001378,0.000817,0.000627,0.000533,0.000457,0.000317,0.000240,0.000206])   

plt.grid(axis='y', linestyle='dotted', which='minor')
plt.grid(axis='x',linestyle='dotted')
plt.yscale('log')
plt.yticks([0.00005])
plt.show()

1 个答案:

答案 0 :(得分:1)

我会删除您的声明

plt.grid(axis='y', linestyle='dotted', which='minor')
plt.grid(axis='x',linestyle='dotted')
plt.yscale('log')
plt.yticks([0.00005])

并替换为:

plt.yscale('log')
yticks = [5E-3, 2E-3, 1E-3, 5E-4, 2E-4, 1E-4]
plt.yticks(ticks=yticks,labels=[format(x, '.0e') for x in yticks])
plt.grid(axis='y')

有帮助吗?

编辑:

如果您确实希望标签的格式为 a x 10-b,您可以使用以下代码:

yticks = [5E-3, 2E-3, 1E-3, 5E-4, 2E-4, 1E-4]
ylab=[]
for c,x in enumerate(yticks):
    xstr=format(x, '.0e').split('e')
    ylab.append(xstr[0]+ ' x $10^{' + xstr[1] +'}$' )
plt.yticks(ticks=yticks,labels=ylab)