繁体   English   中英

Matplotlib:如何使用 secondary_yaxis() 在半对数 plot 的 y 刻度标签中仅显示指数?

[英]Matplotlib: How can I show only exponents in the y tick labels of a semi-log plot with secondary_yaxis()?

我一直在研究 matplotlib 的 secondary-yaxis,我不知道应该如何设置“函数”参数以获得我想要的结果。

我想制作一个半日志 plot 并以以下两种格式设置 y-ticks 的标签:

  1. 普通格式,例如“10^1, 10^2, 10^3, ..., 10^(exponent), ...”
  2. 只有指数:“1, 2, 3, ...”

我想将它们放在左侧 y 轴的前一种样式中,以及右侧的后一种样式中。

我想做的可以通过像这样使用 twinx() 来完成:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 3, 41)
y = 10**x

fig, ax1 = plt.subplots()
ax1.set_yscale('log')
ax1.plot(x, y)

ax2 = ax1.twinx()
ymin, ymax = ax1.get_ylim()
ax2.set_ylim(np.log10(ymin), np.log10(ymax))

plt.show()

在此处输入图像描述

你会看到右边 label 中的 i=(1, 2, 3) 与左边 label 中的 10^i 位于同一高度。

但是,我想知道如何通过 secondary_yaxis 做同样的事情。 我已经试过了,但没有用。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(1, 3, 41)
y = 10**x

fig, ax = plt.subplots()
ax.set_yscale('log')
ax.plot(x, y)

def forward(x):
    return np.log10(x)
def backward(x):
    return 10**x

secax = ax.secondary_yaxis('right', functions=(forward, backward))

plt.show()

结果是: 在此处输入图像描述

您可以看到右侧刻度标签已损坏。 我怀疑我设置 secondary_yaxis() 参数“功能”的方式可能无效。 如果您能告诉我该怎么做,我将不胜感激。

我在 matplotlib 3.1.0 上得到了破损的数字。 并将其更新到 3.3.0。 已经解决了问题。 与问题的第二个代码块相同的代码生成这个。 在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM