没有Pandas的海洋生物

2024-04-19 15:16:56 发布

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

由于一些原因,我不想进入,我需要在不使用熊猫数据帧的情况下制作小提琴图。例如,我有以下数据和类别

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


data = np.random.randn(5, 3)
category = np.array(["yes", "no", "no", "no", "yes", "yes","yes", "no", "yes", "yes", "yes", "no", "no", "no", "no"])

ax = sns.violinplot(data = data)
plt.show()

结果为未分组的小提琴图

violin plots

然而,我想使用分类数据来制作一个分组的小提琴图

ax = sns.violinplot(data = data, x = category)
plt.show()

给出一个错误AttributeError: 'numpy.ndarray' object has no attribute 'get'。没有熊猫有办法解决这个问题吗


Tags: 数据noimportnumpydataasshownp
1条回答
网友
1楼 · 发布于 2024-04-19 15:16:56
  1. 如果对xyhue使用多个numpy数组,请不要使用data参数
  2. y中,可以使用np.nonzero创建索引数组
  3. 确保所有的np.arrays都是一维的.flatten()。例如,Iflatten您的随机浮点数组从5,315,1的形状;否则,您将得到一个错误,因为数组具有不同的形状,并且Seaborn无法像使用pandas数据帧那样解决它

同样,如果将三个(5,3)数组传递给xyhue,那么Seaborn将不知道该做什么。因此,您必须a)FLATTEN所有数组并使它们的长度等于(15,0)或b)使用数据帧


import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt


y = np.random.randn(5, 3)
x = np.nonzero(y)[-1]
y = y.flatten()
hue = np.array(["yes", "no", "no", "no", "yes", "yes","yes", "no", "yes", "yes", "yes", "no", "no", "no", "no"])
sns.violinplot(x=x, y=y, hue=hue)

enter image description here

print(x,'\n\n',y,'\n\n',hue)

[0 1 2 0 1 2 0 1 2 0 1 2 0 1 2] 

 [-0.28618123 -1.18132595  0.70535902  0.90685532 -1.27258432  0.90417094
  3.03506025  0.99796779  0.20247628  0.43226169  0.25005372 -0.9923336
 -0.43102785 -0.17117549 -0.16147393] 

 ['yes' 'no' 'no' 'no' 'yes' 'yes' 'yes' 'no' 'yes' 'yes' 'yes' 'no' 'no'
 'no' 'no']

相关问题 更多 >