符号学图没有正确的颜色 y 刻度

问题描述 投票:0回答:1

问题出在

semilogy
,而不是
twinx
。从下一个代码开始

import numpy as np
import matplotlib.pyplot as plt
def plot_me(x):
    fig, ax1 = plt.subplots()
    ax1.semilogy(x, color="blue")
    for label in ax1.get_yticklabels():
        label.set_color("blue")

    ax2 = ax1.twinx()
    ax2.semilogy(1/x, 'red')
    for label in ax2.get_yticklabels():
        label.set_color("red")        

plot_me(np.arange(.1, 1.3, 1e-1))
在左侧 y 轴上穿过 1e-1 和 1e0,在右侧穿过另外两个原木。一切都好:

另一方面,

plot_me(np.arange(.1, .3, 1e-2))
没有通过至少两个log10(无论是在左还是右y轴上),因此两个轴都留出了1个log10 y刻度,也不是log10 y刻度,我无法正确显示颜色:

此外,

semilog
的 y 刻度都是 log10,这与我们在之前绘图的 y 刻度标签中看到的相矛盾!

def print_y_ticks(x):
    fig, ax1 = plt.subplots()
    ax1.semilogy(x, color="blue")
    for label in ax1.get_yticklabels():
        label.set_color("blue")
    print(ax1.get_yticks())
    return ax1
    
ax = print_y_ticks(np.arange(.1, 1.3, 1e-1)) # [1.e-03 1.e-02 1.e-01 1.e+00 1.e+01 1.e+02]
ax = print_y_ticks(np.arange(.1, .3, 1e-2))  # [1.e-03 1.e-02 1.e-01 1.e+00 1.e+01]

我的解决方法是:

import numpy as np
import matplotlib.pyplot as plt
def ticks2log(ax):
    yticks = ax.get_yticks()
    ax.set_yticks(yticks, [f'{k:.1e}' for k in yticks])
    return ax

def plot_me_new(x1, x2):
    x1 = np.log10(x1)
    x2 = np.log10(x2)

    fig, ax1 = plt.subplots()

    ax1.plot(x1, lw=2, color="blue")
    ax1 = ticks2log(ax1)
    for label in ax1.get_yticklabels():
        label.set_color("blue")

    ax2 = ax1.twinx()
    ax2.plot(x2, lw=2, color="red")
    ax2 = ticks2log(ax2)
    for label in ax2.get_yticklabels():
        label.set_color("red")

x = np.arange(.1, .3, 1e-2); plot_me_new(x, 1/x)
的结果颜色正确,但比较乏味。

预先感谢您的帮助!

PD:问题在于

semilogy
,而不是
twinx

python matplotlib plot logarithm yticks
1个回答
0
投票
ax.get_yticklabels(which='both')

JohanC

解决
© www.soinside.com 2019 - 2024. All rights reserved.