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

如何在Matplotlib的contourf图中显示内侧刻度线?

问题:contourf绘图后坐标轴内侧刻度线消失

使用Matplotlib绘制contourf等高线图后,坐标轴内侧的刻度线被覆盖消失,但刻度标签显示正常。尝试通过ax1.set_xticks手动指定刻度并设置visible=True无效,且使用了ggplot和自定义样式表。

原因分析

问题源于样式表的属性冲突与contourf的绘图逻辑:

  • ggplot样式会修改坐标轴默认属性,与自定义样式中的xtick.direction: "in"等设置可能产生冲突;
  • contourf默认的图层优先级(zorder)较高,会覆盖位于下方的刻度线;
  • 部分样式属性在contourf绘图过程中会被临时重置,导致手动设置的刻度属性失效。

解决方案

方法1:绘图后强制重置刻度线属性

在contourf绘图完成后,通过tick_params明确设置刻度线的方向、可见性及图层优先级,确保刻度线显示在等高线之上:

# 绘制contourf后添加以下代码
ax1.tick_params(axis='both', direction='in', which='both', visible=True, zorder=2)
  • axis='both':同时设置x、y轴;
  • which='both':同时生效主、次刻度(仅需主刻度可改为which='major');
  • zorder=2:确保刻度线图层优先级高于等高线(默认contourf的zorder为1)。

方法2:调整样式加载顺序

将自定义样式表放在ggplot之后加载,确保自定义属性覆盖ggplot的默认设置:

plt.style.use(['ggplot', 'mpl_latex_stylesheet'])

完整修改代码示例

import numpy as np
import matplotlib.pyplot as plt

# 加载样式表,自定义样式在后覆盖默认属性
plt.style.use(['ggplot','mpl_latex_stylesheet'])

fig = plt.figure(figsize=(10,4))
ax1 = fig.add_subplot([0.15, 0.15, 0.35, 0.73])

r = np.linspace(0.5, 3, 100)
z = np.linspace(0, 2*np.pi, 100)

data = [[r[i]*z[j] for i in range(np.size(r))] for j in range(np.size(z))]

R1, Z = np.meshgrid(r, z)

# 设置contourf的zorder为1,低于刻度线
cont = ax1.contourf(R1,Z, data, 500, cmap = 'coolwarm', zorder=1)

# 强制恢复内侧刻度线
ax1.tick_params(axis='both', direction='in', which='both', visible=True, zorder=2)

plt.show()

内容的提问来源于stack exchange,提问作者Chris H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:35:10