我想用Python绘制小提琴图,以解决多元回归问题。我尝试获取时间序列输入的预测标量值。选择的库可能是matplotlib和/或seaborn,但我愿意接受其他建议。
这就是我所拥有的:
示例输入:
执行回归后的示例输出:
我想获得的是一个不错的小提琴图,如this tutorial所示。这是我的熊猫数据框的样子:
dataframe = pd.DataFrame(
{'Predictions': predictions, # This is a list of k elements
'Subject IDs': subjectIDs, # This is a list of n strings
'Ground truths': groundtruths # This is a list of n float values
})
尝试使用
绘制图sns.violinplot( ax = ax, y = dataframe["Predictions"] )
仅导致:
TypeError:未找到与指定签名匹配的循环,并且未找到用于ufunc add的强制转换
此外,我还已经尝试使用命令
遵循官方seaborn documentationax = sns.violinplot(x="Subject IDs", y="Predictions", data=dataframe)
相反。但是,这只会导致
TypeError:不可散列的类型:“列表”
更新:如果我将“预测”列表视为元组,则可以成功创建一个没有错误的图,但不幸的是,由于将所有预测值都放在y轴上,因此该图已完全弄糟(请参见下面的代码段)。
因此,我的问题是:如何在x轴上绘制所有主体ID,在y轴上显示地面实况并预测的概率分布,相应的平均值和置信区间为小提琴情节?
答案 0 :(得分:0)
好的,我解决了我的问题。问题出在我的输入熊猫数据框。我必须确保为我的每个观察结果准确地分配了一个预测,而不是不完整列表。
这是我的数据框的外观:
data = pd.DataFrame(
{'groundtruths': groundtruthsList,
'predictions': predictionsList,
'subjectIDs': subjectIDsList
})
print(data.head())
groundtruths predictions subjectIDs
0 70 75.864983 01
1 70 50.814903 01
2 70 80.715569 01
3 70 70.627260 01
4 70 49.516285 01
. . . .
. . . .
. . . .
现在,由于数据框具有正确的格式,因此我可以轻松地绘制精美的小提琴图
sns.violinplot(x="subjectIDs", y="predictions", data=data)
也可以使用一个简单的seaborn scatterplot来很好地说明该图中每个主题的基本事实。