如何在matplotlib分类数据绘图中添加数据间隙?
分类数据Matplotlib绘图保留间隙的解决办法
数值数据的间隙实现方式
处理带时间索引的数值数据时,直接在缺失位置设置np.nan就能生成绘图间隙,效果远优于直接跳过缺失时间点。示例代码如下:
import numpy as np import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5, 6, 7] y = [10, 20, 30, np.nan, 10, 20, 30] plt.plot(x, y) plt.show() plt.close()
分类数据的问题
但当y为分类数据时,np.nan无法生成间隙,反而会在对应位置绘制点:
import numpy as np import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5, 6, 7] y = ["cat", "cat", "dog", np.nan, "dog", "cat", "cat"] plt.plot(x, y) plt.show() plt.close()
解决方案:拆分数据分段绘制
要实现x=1-3对应cat、cat、dog,x=5-7对应dog、cat、cat,且在x=4处保留间隙,最直接的方法是将数据拆分为两段连续序列分别绘制:
import numpy as np import matplotlib.pyplot as plt # 拆分有效数据为两段连续序列 x1 = [1, 2, 3] y1 = ["cat", "cat", "dog"] x2 = [5, 6, 7] y2 = ["dog", "cat", "cat"] # 分别绘制两段数据,自动形成间隙 plt.plot(x1, y1) plt.plot(x2, y2) # 可选:手动设置y轴分类标签,避免自动排序 plt.yticks(["cat", "dog"]) plt.show() plt.close()
补充说明
- Matplotlib的
plot()函数只会连接同一次调用中的连续数据点,不同plot()调用的序列之间不会自动衔接,从而自然形成x=4处的间隙。 - 如果需要两段线条样式完全一致,可在
plot()中指定相同的样式参数,比如plt.plot(x1, y1, 'b-o')和plt.plot(x2, y2, 'b-o')。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

