Python绘图设置:让Y轴独立于Y值,等间距显示离散Alpha值
实现离散Y值等间距的时间序列图
问题描述
我是Python初学者,尝试绘制时间序列数据但效果不理想。我的Y变量Alpha有四个离散取值:0.0001、0.001、0.01、0.1。使用常规方法绘图时,Y轴按数值大小缩放,我希望这四个值在Y轴上彼此间距相等,而非反映真实数值距离,求实现方法。
原代码(注:缺少import pandas as pd,需补充才能运行):
import matplotlib.pyplot as plt import numpy as np d1 = {'Year': [1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007], 'Alpha': [0.0001, 0.1, 0.01, 0.1, 0.0001, 0.001, 0.1, 0.0001, 0.01, 0.001, 0.0001, 0.1]} df = pd.DataFrame(data=d1) plt.plot('Year', 'Alpha', data=df, label = "Alpha Value") plt.show()
解决方案
以下两种方法都可以实现Y轴离散值等间距显示:
方法1:将Alpha转为有序分类变量
把Alpha列定义为有序分类类型,让matplotlib将其当作离散类别处理,自动实现等间距Y轴。
import matplotlib.pyplot as plt import pandas as pd d1 = {'Year': [1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007], 'Alpha': [0.0001, 0.1, 0.01, 0.1, 0.0001, 0.001, 0.1, 0.0001, 0.01, 0.001, 0.0001, 0.1]} df = pd.DataFrame(data=d1) # 按数值顺序定义分类,保证Y轴从低到高排列 alpha_order = [0.0001, 0.001, 0.01, 0.1] df['Alpha'] = pd.Categorical(df['Alpha'], categories=alpha_order, ordered=True) plt.plot(df['Year'], df['Alpha'], label="Alpha Value") plt.ylabel('Alpha') plt.xlabel('Year') plt.legend() plt.show()
方法2:手动映射数值到索引
将Alpha的离散值映射为整数索引,再替换Y轴刻度标签为原数值,完全自定义显示效果。
import matplotlib.pyplot as plt import pandas as pd d1 = {'Year': [1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007], 'Alpha': [0.0001, 0.1, 0.01, 0.1, 0.0001, 0.001, 0.1, 0.0001, 0.01, 0.001, 0.0001, 0.1]} df = pd.DataFrame(data=d1) # 获取排序后的离散值,并创建数值到索引的映射 alpha_values = sorted(df['Alpha'].unique()) value_to_idx = {v:i for i, v in enumerate(alpha_values)} # 转换为索引列用于绘图 df['Alpha_idx'] = df['Alpha'].map(value_to_idx) plt.plot(df['Year'], df['Alpha_idx'], label="Alpha Value") # 设置Y轴刻度和对应标签 plt.yticks(ticks=range(len(alpha_values)), labels=alpha_values) plt.ylabel('Alpha') plt.xlabel('Year') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者ChurrrT
相关产品推荐
相关产品推荐

