Matplotlib如何绘制每对y坐标的连接线并解决维度报错问题
你遇到的报错是因为传入plt.plot的x、y数组维度超过了matplotlib支持的最大2维限制:原始的data1、data2、data3均为shape为(5,1)的二维列向量,没有降维就直接拼接,最终传入绘图方法的数组shape为(2,5,1)的三维结构,触发维度错误。
可行解决方案
你可以先将所有数组降为1维后再绘图,修改后的完整代码如下:
import numpy as np import matplotlib.pyplot as plt # 原有数组定义部分保持不变 data1 = np.array(means1) data2 = np.array(ci_l) data3 = np.array(ci_h) # 新增:将所有数组降为1维,去掉多余的尾部维度 x = data1.flatten() y_low = data2.flatten() y_high = data3.flatten() # 绘制散点 plt.plot(x, y_low, 'rs', markersize = 4) plt.plot(x, y_high, 'bo', markersize = 4) # 绘制每对y点之间的竖线,两种方法二选一即可 # 方法1:适配你参考的plot写法,降维后不会报错 plt.plot([x, x], [y_low, y_high], c='black') # 方法2:更简洁的竖线专用API,语义更清晰 # plt.vlines(x=x, ymin=y_low, ymax=y_high, color='black') plt.show()
原理说明
flatten()方法会将shape为(n,1)的二维列向量转为(n,)的一维数组,此时传入plt.plot的[x,x]结构为shape(2,5)的合法二维数组,matplotlib会自动按列配对两个y值绘制连线。
内容的提问来源于stack exchange,提问作者Clara Puglisi
相关产品推荐
相关产品推荐

