Matplotlib绘制整数型离散y值散点图时y轴无多余间隔的实现方法
实现方法
无需修改原始DataFrame,可通过映射离散值到连续位置、再自定义y轴刻度的方式实现,完整实现代码如下:
import numpy as np import pandas as pd import matplotlib.pyplot as plt # 测试数据,全程使用y为整数的原始df np.random.seed(432987435) nofpoints = 160 xval = np.arange(nofpoints) disc = [ 200, 240, 250, 290 ] yval = np.random.choice(disc, nofpoints) cval = np.random.random(nofpoints) df = pd.DataFrame({'xval': xval, 'yval':yval, 'cval': cval}) # 绘图逻辑 fig = plt.figure(dpi=128, figsize=(12,6)) ax = fig.add_subplot(111) # 提取排序后的唯一离散y值,建立位置映射 sorted_y = sorted(df['yval'].unique()) y_pos_map = {val: idx for idx, val in enumerate(sorted_y)} # 生成绘图用的y坐标 draw_y = df['yval'].map(y_pos_map) # 绘制散点图,c参数可正常绑定你的颜色字段cval ax.scatter(df['xval'], draw_y, marker='o', facecolor='None', edgecolor='g', c=df['cval']) # 自定义y轴刻度,显示原始整数值 ax.set_yticks(range(len(sorted_y))) ax.set_yticklabels(sorted_y) plt.show()
该方案特性:
- 完全不需要修改原始DataFrame的字段,y值全程保留整数类型
- 离散y值按大小自动排序,不会出现顺序混乱问题
- 所有分类值垂直间距相等,无多余空白区域
- 不占用颜色映射功能,可正常将颜色绑定其他数值字段
内容的提问来源于stack exchange,提问作者abhilash
相关产品推荐
相关产品推荐

