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

Python pyplot:使用多个Y值和分类X值绘制散点图,python,matplotlib,scatter-plot,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具有相同的维度,因此我尝试了以下建

我试图用我从实验中收集的数据创建一个简单的散点图。每天,我测试多个实验样本,样本数量也不尽相同。我试图创建一个散点图,以天为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值)。任何帮助都将不胜感激

一个选项是为数据创建展开列表。第一个列表,
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()

我想说的是,这取决于版本。对于matplotlib 2.2或更高版本,第一个代码运行良好并生成所需的绘图。此外,以下答案仅适用于matplotlib 2.2或更高版本。您使用的是哪个版本?这是一个更新选项,还是你特别要求为你的版本提供解决方案?哇!接得好。我正在我的工作电脑上使用anaconda发行版。有趣的是,matplotlib 2.0.2已经安装,并且根据anaconda的说法是最新的。我已经手动更新了这个包到最新的稳定版本,它工作得很好。再次感谢!请注意,您的解决方案适用于matplotlib 2.2或更高版本。然而,问题中的代码(使用
zip
和循环的代码)也可以直接用于这种版本。因此,在这种情况下,实际上没有必要使代码变长。