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
相关产品推荐
相关产品推荐

