如何在ggplot中设置坐标轴范围且不丢失数据点?
解决方案
你遇到的折线断裂是matplotlib默认开启坐标轴边界裁剪导致的,直接调整绘图参数即可解决,不需要修改原始数据:
方法1:直接关闭裁剪(最简单通用)
绘制折线时添加clip_on=False参数,即可保留所有数据点和连线,仅缩放y轴可视范围,不会裁剪超出范围的内容:
import matplotlib.pyplot as plt import numpy as np # 示例数据 x = np.arange(10) y = np.array([3,7,19,11,22,9,17,4,10,13]) # 核心参数:clip_on=False 关闭裁剪 plt.plot(x, y, clip_on=False) # 按需设置y轴显示范围 plt.ylim(ymin=0, ymax=15) plt.show()
方法2:断轴显示(如果需要避免线条溢出坐标轴区域)
如果不希望折线超出坐标轴边界,同时要完整展示所有数据趋势,可以做y轴截断效果,将超出15的区间折叠显示:
import matplotlib.pyplot as plt import numpy as np x = np.arange(10) y = np.array([3,7,19,11,22,9,17,4,10,13]) # 创建上下两个子图拼接 fig, (ax1, ax2) = plt.subplots(2, 1, sharex=True, gridspec_kw={'height_ratios': [1, 3]}) fig.subplots_adjust(hspace=0.05) # 两个子图分别绘制全量数据 ax1.plot(x, y) ax2.plot(x, y) # 分别设置两个子图的y轴范围 ax1.set_ylim(16, 23) # 显示高值区间 ax2.set_ylim(0, 15) # 显示聚焦区间 # 隐藏中间的轴边框 ax1.spines.bottom.set_visible(False) ax2.spines.top.set_visible(False) ax1.xaxis.tick_top() ax1.tick_params(labeltop=False) ax2.xaxis.tick_bottom() # 添加截断标记 d = .5 kwargs = dict(marker=[(-1, -d), (1, d)], markersize=12, linestyle="none", color='k', mec='k', mew=1, clip_on=False) ax1.plot([0, 1], [0, 0], transform=ax1.transAxes, **kwargs) ax2.plot([0, 1], [1, 1], transform=ax2.transAxes, **kwargs) plt.show()
内容的提问来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

