pyplot:使用多个Y值和分类X值绘制散点图

时间:2018-12-19 18:47:20

标签: python matplotlib scatter-plot

我正在尝试使用从实验中收集的指标数据创建一个简单的散点图。每天,我都会测试多个实验样本,样本数量会有所不同。我正在尝试创建一个散点图,将天作为x值,并将当天收集的所有实验值作为y值。

到目前为止,我已经尝试了几种方法。

我将保留完整的代码,但这是数据看起来像的一个示例:

XVals = ['10-Dec-18', '11-Dec-18']
YVals = [[0.88, 0.78, 0.92, 0.98, 0.91],[0.88, 0.78, 0.92, 0.98]]

由于pyplot希望x和y具有相同的维数,因此我尝试了以下建议

for xe, ye in zip(XVals, YVals):
   plt.scatter([xe] * len(ye), ye)

由于我的xval是字符串,这给了我一个值错误。

ValueError: could not convert string to float: '10-Dec-18'

我也尝试过按照以下方式生成图,但是由于x和y的尺寸不同,我又收到一条错误消息:

fig, ax = plt.subplots()
ax.scatter(XVals, YVals)
plt.show()

这给了我一个明显的错误:

ValueError: x and y must be the same size

我无法找到相似图的任何示例(多个Y值和X类别的分类值)。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

一种选择是为数据创建扁平化列表。第一个列表X将包含每个数据点的日期。每天重复n次,其中n是当天的数据点数。第二个列表Y只是YVals的扁平版本。

import matplotlib.pyplot as plt

XVals = ['10-Dec-18', '11-Dec-18']
YVals = [[0.88, 0.78, 0.92, 0.98, 0.91],[0.88, 0.78, 0.92, 0.98]]

X = [XVals[i] for i, data in enumerate(YVals) for j in range(len(data))]
Y = [val for data in YVals for val in data]

plt.scatter(X, Y)
plt.show()

enter image description here