Matplotlib中刻度虚线无法填满设定长度?求原因及解决方法
问题:Matplotlib虚线刻度无法填满指定长度

数轴最左侧的黑色虚线刻度,需要保持虚线样式的同时,长度和右侧实线刻度一致。目前虚线样式已实现,但始终无法覆盖下方橙色实线的完整范围(橙色实线为虚线应达到的长度),求原因及解决办法。
相关代码
import numpy as np from numpy import linspace import matplotlib.pyplot as plt def DrawLine(xCenter, yCenter, tickHeight, center = True): x = xCenter * np.ones(2) y = linspace(yCenter, yCenter + tickHeight, num = 2) if (center): y = y - (tickHeight / 2.) return (x, y) # 假设ax是已创建的matplotlib轴对象 fig, ax = plt.subplots() xAxis = [0., 0.03125, 0.0625, 0.09375, 0.125, 0.15625] yAxis = [0., 0., 0., 0., 0., 0.] height = 0.09226038271880456 for (xi, yi) in zip(xAxis, yAxis): (xs, ys) = DrawLine(xi, yi, height) ax.plot(xs, ys, color = '#ff7f0e', zorder = 0, linewidth = 1.5) ax.plot(xs, ys, color = 'k', zorder = 2, linewidth = 1.5, linestyle = '--') plt.show()
原因分析
Matplotlib默认的虚线样式(linestyle='--')是根据线条总长度自动计算虚线段和间隔的周期。当你的刻度线长度刚好和虚线周期不匹配时,就会出现末端无法填满的情况——比如当前刻度线长度刚好是半段虚线的长度,导致只显示了一段虚线的前半部分。
解决办法
方法1:自定义虚线的线段和间隔
手动指定虚线的线段长度和间隔,让其适配刻度线高度。修改linestyle为元组格式,格式为(偏移量, (线段长度, 间隔长度)),调整数值确保虚线段能完整覆盖整个刻度:
ax.plot(xs, ys, color='k', zorder=2, linewidth=1.5, linestyle=(0, (2, 2)))
方法2:改用vlines绘制竖线
ax.vlines()会严格按照给定的y轴起始和结束位置绘制线条,不会出现虚线截断问题,直接替换原有的plot调用即可:
def DrawLine(xCenter, yCenter, tickHeight, center = True): if center: y_start = yCenter - tickHeight/2 else: y_start = yCenter y_end = y_start + tickHeight return xCenter, y_start, y_end for (xi, yi) in zip(xAxis, yAxis): x, y_start, y_end = DrawLine(xi, yi, height) ax.vlines(x, y_start, y_end, color='#ff7f0e', zorder=0, linewidth=1.5) ax.vlines(x, y_start, y_end, color='k', zorder=2, linewidth=1.5, linestyle='--')
内容的提问来源于stack exchange,提问作者Sasha
相关产品推荐
相关产品推荐

