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

Matplotlib面向对象模式下设置set_xticks、指定X轴及双X轴实现问题

Matplotlib面向对象方式设置X轴及双X轴实现

基础问题:将col2设置为X轴

你给出的原始代码默认使用DataFrame的索引作为X轴刻度,通过面向对象操作Axes对象的set_xticks方法实现替换的代码如下:

import matplotlib.pyplot as plt
import numpy as np
from numpy.core.function_base import linspace
import pandas as pd

data = {'col1' : linspace(1,3),
        'col2' : linspace(3, 6)
        }
df = pd.DataFrame(data)

fig = plt.figure()
axes = df['col1'].plot()

# 面向对象设置X轴逻辑
axes.set_xticks(df.index) # 设置刻度位置与原始数据索引对齐
axes.set_xticklabels(df['col2'].round(2)) # 设置刻度显示值为col2的数值
axes.set_xlabel('col2') # 调整X轴标签

plt.show()

如果需要自定义刻度密度,不需要展示所有索引位置的刻度,可以自定义刻度位置:

# 仅保留5个均匀分布的刻度示例
tick_positions = np.linspace(df.index.min(), df.index.max(), 5).astype(int)
axes.set_xticks(tick_positions)
axes.set_xticklabels(df['col2'].loc[tick_positions].round(2))

附加问题:实现双X轴显示

实现底部显示col2、顶部显示col3的双X轴效果,需要调用Axes对象的twiny方法生成顶部X轴对应的新Axes对象,单独配置即可,代码如下:

import matplotlib.pyplot as plt
import numpy as np
from numpy.core.function_base import linspace
import pandas as pd

data = {'col1' : linspace(1,3),
        'col2' : linspace(3, 6),
        'col3' : linspace(10, 20) # 补充col3示例数据
        }
df = pd.DataFrame(data)

fig = plt.figure()
axes = df['col1'].plot()

# 配置底部X轴(col2)
axes.set_xticks(df.index)
axes.set_xticklabels(df['col2'].round(2))
axes.set_xlabel('col2', color='tab:blue')
axes.tick_params(axis='x', labelcolor='tab:blue')

# 生成顶部X轴对象
axes_top = axes.twiny()
# 配置顶部X轴(col3)
axes_top.set_xticks(df.index)
axes_top.set_xticklabels(df['col3'].round(2))
axes_top.set_xlabel('col3', color='tab:red')
axes_top.tick_params(axis='x', labelcolor='tab:red')

plt.show()

双X轴的刻度位置均和原始数据索引对齐,保证两个X轴的刻度和绘制的col1数值对应关系一致,也可以根据需求单独调整两个轴的刻度密度。


内容的提问来源于stack exchange,提问作者Lucas Schwartz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 03:15:01