首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matplotlib :如何在x logscale轴上显示和增加次要刻度和主要刻度的大小

Matplotlib :如何在x logscale轴上显示和增加次要刻度和主要刻度的大小
EN

Stack Overflow用户
提问于 2020-06-02 00:32:49
回答 1查看 414关注 0票数 0

我正在绘制a (logscale,symlog)数据的曲线图。我有困难出现在x轴(对数刻度)上的小刻度与可见的高度和宽度。

在x轴上,我有从1e-8到1的值。一开始,因为我不知道的原因,我只有一个"2次方10“的区间,即我在x_axis的曲线图上得到了像这样的专业的值:

代码语言:javascript
运行
复制
[1e-8, 1e-6, 1e-4, 1e-2, 1]

我通过显式执行以下操作修复了此问题:

代码语言:javascript
运行
复制
  # Important otherwise missing ticks
  plt.xticks([1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1])

所以现在,我有了以下的数字:

正如你所看到的,每个10异能的小标记都丢失了,我不知道如何显示它们,即使每个10异能之间没有太多的空间。

下面是我用来生成这个图形的代码:

代码语言:javascript
运行
复制
# Modules import
import sys
import numpy as np
import scipy.integrate as pyint
import os
from os import path
import glob
import scipy
import re
import shutil
import matplotlib.pyplot as plt 
from matplotlib import ticker

# Initialize figure
fig = plt.figure(num=None, figsize=(12, 12), facecolor='w', edgecolor='k')
fig.patch.set_facecolor('white')
fig.patch.set_alpha(1)

# Control on graphic
ax = plt.gca()

# Increase space between x-axis and x-label
ax.tick_params(axis = 'x', which = 'major', pad = 15)

# Lebels on axis
plt.xlabel('Step $\Omega_{m}$', fontsize = 20)
plt.ylabel('$C_{\ell}^{\'}$($\Omega_{m}$) relative', fontsize = 20)
plt.xticks(fontsize = 20)
plt.yticks(fontsize = 20)
plt.xscale('log')
plt.grid()

# Important otherwise missing ticks
plt.xticks([1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1])

# Title : different multipoles
string_intel = '(CAMB-0.1.7) - '+type_GG_LL_GL+' - $C_{\ell}^{\'}$ relative of '+paramLatexArray[idParam]+'('+str(der)+' pts) at $z$ = '+str(zrange[idRedshift])+' - '+str(numel)+' pts'
plt.title(string_intel, fontsize = 20, pad = 25)

colorSimplePlot = ['b', 'r', 'g', 'k', 'y', 'm', 'c']

# Plot command 
for idMultipole in range(len(multipole)):
  plt.plot(stepNewArray[:], eval('matrixCl_der_'+str(der)+'[:, idMultipole, idParam, lx, ly]'), colorSimplePlot[idMultipole])

# Chose if negative or positive derivatives
# Plot with symlog or log along y-axis
# 1) For example : GG at z = 2.038 and l = 366
#    needs symlog with lintreshy = 1e-9
# 2) For example : LL at z = 2.038 and l = 366
#    needs nothing (even no log)
if (type_GG_LL_GL == 'GG'):
  plt.yscale('symlog', linthreshy = 1e-9)
elif (type_GG_LL_GL == 'LL'):
  plt.yscale('linear')

# Legend
plt.legend(['$l = 366.42$', '$l = 1079.28$', '$l = 1792.14$', '$l = 2505$',\
        '$l = 3217.85$', '$l = 3930.71$', '$l = 4643.57$'], fontsize=15, loc='best')

# Save plot
plt.savefig('Cl_derivative_Omega_m.pdf')

任何人都能看到我必须做什么才能显示x轴对数刻度的每个间隔的次要xtick?

我还尝试添加了以下内容:

代码语言:javascript
运行
复制
from matplotlib import ticker
from matplotlib.ticker import LogLocator

ax.tick_params(axis = 'x', which = 'major', pad = 15)
ax.xaxis.set_major_locator(LogLocator(base=10))
ax.xaxis.set_major_locator(LogLocator(base=10, subs=[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0]))

但这不管用..。

在第二次,我也希望有控制这些小滴答的大小。

感谢@Quand Huang,我成功地完成了以下数字:

你可以注意到,主要的记号消失了,网格命令也消失了,也就是在我的代码片段中执行:

代码语言:javascript
运行
复制
  minors = (0.1**np.arange(9)[:,None] * np.arange(0.1,1,0.1)).ravel()
  plt.yticks(fontsize = 20)
  plt.xscale('log')
  # Important otherwise missing ticks
  plt.xticks([1e-8, 1e-7, 1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1], fontsize = 40)
  plt.xticks(minors, fontsize = 20)
  plt.grid()

我尝试为手动主要刻度(fontsize = 40)设置大字体,但它没有出现。顺便问一下,为什么grid模式消失了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-02 01:26:48

您可以像这样生成次要标记:

代码语言:javascript
运行
复制
minors = (0.1**np.arange(9)[:,None] * np.arange(0.1,1,0.1)).ravel()

plt.xscale('log')
plt.xticks(minors);

输出:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62136645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档