如何用Matplotlib绘制带X标记的多水平数值线图表?
使用Matplotlib实现指定线图与刻度标记的方法
核心思路
针对你的需求,我们可以循环遍历每个ys中的y值,绘制对应水平线,并在xs子列表的每个x坐标位置添加标记(点或短线),同时同步更新x轴刻度。
实现代码示例
import matplotlib.pyplot as plt # 定义数据 xs = [[5,7,9], [3,4,15,19]] ys = list(range(len(xs))) # 此处为 [0, 1] # 创建画布与坐标轴 fig, ax = plt.subplots() # 遍历每个y值和对应的x坐标列表 for y, x_coords in zip(ys, xs): # 绘制水平参考线 ax.axhline(y=y, color='#333333', linestyle='-', linewidth=1) # 在每个x坐标位置添加标记点(也可以替换为垂直短线) ax.scatter(x_coords, [y]*len(x_coords), color='#007acc', marker='o', s=30) # 将所有x坐标添加到x轴刻度中 ax.set_xticks(list(ax.get_xticks()) + x_coords) # 设置y轴刻度为ys中的值 ax.set_yticks(ys) # 添加坐标轴标签 ax.set_xlabel('X 坐标') ax.set_ylabel('Y 坐标') # 自动调整布局 plt.tight_layout() plt.show()
可选调整:用垂直短线做刻度标记
如果想要更接近“刻度”的视觉效果,可以把scatter替换为垂直短线:
# 替换scatter的代码 ax.vlines(x=x_coords, ymin=y-0.08, ymax=y+0.08, color='#e74c3c', linewidth=2)
效果说明
- 每条水平线对应
ys中的一个y值,贯穿整个x轴范围 - 每个x坐标位置会有清晰的标记(点或短线),直观对应
xs子列表中的数值 - x轴会包含所有
xs里的整数,方便读取具体位置
内容的提问来源于stack exchange,提问作者skywalker
相关产品推荐
相关产品推荐

