You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

semilogy绘图无法正确设置y轴刻度颜色问题求助

问题:semilogy对数轴刻度颜色异常的优化解决方法

问题出在*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轴均覆盖至少两个log10量级,刻度颜色设置正常:

    示例图1:左y轴为蓝色对数刻度,右y轴为红色对数刻度,所有刻度颜色匹配正确,无额外非对数刻度

  • 调用plot_me(np.arange(.1, .3, 1e-2))时,左右y轴均未覆盖两个log10量级,此时轴上除对数刻度外还出现非对数刻度,无法为其正确设置颜色:

    示例图2:轴上混杂非对数刻度,这类刻度未被设置对应颜色,与预期的单色对数轴不符

另外,semilogy的get_yticks()返回的均为对数刻度,这与绘图显示的非对数刻度标签矛盾:

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)可实现正确着色,但过程繁琐,恳请提供更优解决方法。

内容的提问来源于stack exchange,提问作者Xopi García

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:20:59