如何创建Matplotlib小提琴P

2024-06-14 18:27:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着让我的第一个Matplotlib小提琴绘图,我使用的是这个SO post中的确切代码,但是得到了一个KeyError错误。我不知道那是什么意思。有什么想法吗?在

Process pandas dataframe into violinplot

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


x = np.random.poisson(lam =3, size=100)
y = np.random.choice(["S{}".format(i+1) for i in range(6)], size=len(x))
df = pd.DataFrame({"Scenario":y, "LMP":x})

fig, axes = plt.subplots()

axes.violinplot(dataset = [df[df.Scenario == 'S1']["LMP"],
                           df[df.Scenario == 'S2']["LMP"],
                           df[df.Scenario == 'S3']["LMP"],
                           df[df.Scenario == 'S4']["LMP"],
                           df[df.Scenario == 'S5']["LMP"],
                           df[df.Scenario == 'S6']["LMP"] ] )

错误:

^{pr2}$

Tags: importpandasdfsizematplotlibas错误np
1条回答
网友
1楼 · 发布于 2024-06-14 18:27:18

每当在容器中查找项目失败时,KeyError将被引发。这些查找中使用的值是,错误意味着0不是数据帧的有效键。在

DataFrame对象不是传统的NumPy数组。它们包含一个索引,它提供基于或多或少任意信息的快速数据查找,包括数字数据,以及日期、字符串等。这与标准的ndarrays相反,后者只允许线性索引(即位置)作为有效键。因此,当您执行类似df[0]的操作时,这是试图在帧的索引中查找值0,而不是检索数组中的第一个项。在

但是,如果您df[df.Scenario == 'S1']['LMP'].index,您应该看到:

Int64Index([8, 20, 25, 27, 28, 35, 52, 57, 62, 68, 72, 74, 77, 80, 81, 83, 97], dtype='int64')

注意,0找不到,因此{}。matplotlib被设计用来处理NumPyndarray对象,而不是PandasDataFrame对象。它对这种奇特的索引一无所知,因此这些类型的错误很常见。在

你有几个选择来解决这个问题。首先,将要绘制的数据转换为数组。对于每个这样的数组,可以使用df[df.Scenario == 'S1']['LMP'].values。在

另一种方法是使用像^{}这样的包,它是显式设计来处理Pandas框架的。总的来说,我强烈推荐Seaborn,它是一个非常漂亮和设计精良的包装。例如,它有自己的^{}版本,它支持DataFrame和一整套选项。在

相关问题 更多 >