【问题标题】:Logarithmic y axis makes tick labels disappear [duplicate]对数y轴使刻度标签消失[重复]
【发布时间】:2015-11-21 18:32:53
【问题描述】:

plt.yscale('log') 添加到我的简单绘图脚本后

import numpy as np
residuals = np.loadtxt('res_jacobi.txt', skiprows=1)

import matplotlib.pyplot as plt
fig = plt.figure()

steps = np.arange(0, len(residuals), 1)

plt.plot(steps, residuals, label='$S$')

plt.xlabel("Step",fontsize=20)
plt.ylabel("$S$",fontsize=20)
plt.ylim(0.95 * min(residuals), 1.05 * max(residuals))
plt.yscale('log')

plt.savefig('jacobi-res.pdf', bbox_inches='tight', transparent=True)

y 标签消失。

我确信有一个简单的解决方法,但搜索没有出现。任何帮助将不胜感激。

【问题讨论】:

标签: python matplotlib axis-labels


【解决方案1】:

matplotlib 的正常行为是仅在对数缩放中标记主要刻度线 --- 这是偶数数量级,例如{0.1, 1.0}。你的价值观都在这两者之间。你可以:

  • 将坐标轴重新缩放到更大的范围,
    plt.gca().set_ylim(0.1, 1.0)
  • 手动标记刻度线,
    plt.gca().yaxis.set_minor_formatter(FormatStrFormatter("%.2f"))

【讨论】:

  • 使用plt.gca().set_yscale('semilog'),会得到错误ValueError: Unknown scale type 'semilog'plt.gca().set_yscale('log') 执行但仍然缺少标签。 plt.gca().set_ylim(0.1, 1.0) 有效,但选择足够大的边界以显示 y 标签几乎会使绘图看起来恒定(是的,我知道这意味着首先不需要使用对数刻度,但我只是按照此处的说明进行操作)。谢天谢地,plt.gca().yaxis.set_minor_formatter(FormatStrFormatter("%.2f")) 效果很好。谢谢!
【解决方案2】:

semilogy 为我工作。

变化:

plt.plot(steps, residuals, label='$S$')

进入:

plt.semilogy(steps, residuals, label='$S$')

删除plt.yscale('log')

【讨论】:

  • 感谢您的提示,但这对我没有任何改变。
猜你喜欢
  • 1970-01-01
  • 2012-03-14
  • 2021-06-14
  • 2015-12-18
  • 1970-01-01
  • 2011-03-28
  • 1970-01-01
  • 2020-08-29
  • 2020-11-22
相关资源
最近更新 更多