我遇到了 plt.scatter() 函数的问题。错误消息说'类型错误:不可散列类型:'numpy.ndarray''我希望此代码创建 x 和 y 数据帧的散点图。当我在代码中输入一个样本单元时,这两个数据帧的大小相同 (88,2)。
import statistics
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
df=pd.read_csv('example.csv')
unit=(input("Enter unit here:"))
ind1 = df['Unit'] == unit
unitrows=ind1[ind1].index
df=df.iloc[unitrows,:]
df=df['Date'].groupby([df.Material]).apply(list).reset_index()
def ADIFinal(df):
docdtmeans=[]
for index, row in df.iterrows():
x=np.diff((sorted(row['Date'])))
x=x[x!=0]
if x.any():
x=abs(statistics.mean(x))
else:
x=None
docdtmeans.append(x)
d={'Material':df['Material'], 'ADI':docdtmeans}
dfmeans=pd.DataFrame(data=d)
return dfmeans
x=ADIFinal(df)
print(x)
df=pd.read_csv('example.csv')
df=df.iloc[unitrows,:]
df=df['Quantity'].groupby([df.Material]).apply(list).reset_index()
def CV2Final(df):
cv2=[]
for index, row in df.iterrows():
z=row['Quantity']
if len(z)>1:
z=((((statistics.stdev(z)/statistics.mean(z)))**2))
else:
z=None
cv2.append(z)
d={'Material':df['Material'], 'cv2':cv2}
dfcv2=pd.DataFrame(data=d)
return dfcv2
y=CV2Final(df)
print(y)
fig, ax = plt.subplots(figsize=(10,10))
plt.scatter(x,y, color='black') #this is where I am having an issue.
plt.xlim([0,10])
plt.ylim([0,10])
plt.title(unit)
以下是 csv 文件中的信息示例。(数字是第一列,材料是第二列,数量是第三列......)
Material: Quantity: Unit: Date:
0 B 1 A 43455
1 B 1 A 43455
2 C 1 A 43455
3 C 1 A 43456
4 D 1 A 43455
5 D 1 A 43455
6 B 1 A 43455
7 B 2 A 43455
8 B 8 A 43459
9 B 5 A 43467
10 B 3 A 43452
11 D 7 A 43451
根据此处的Matplotlib 文档,输入为plt.scatter()
:
x, yfloat 或类似数组的, shape (n, ) 数据位置。
但是在您的代码中,您传递给 scatter 函数的是两个pd.DataFrame
. 所以第一列是名称,但第二列是存储值的位置:
fig, ax = plt.subplots(figsize=(10,10))
plt.scatter(x.values[:, 1], y.values[:, 1], color='black') #this is where I am having an issue.
plt.xlim([0,10])
plt.ylim([0,10])
plt.title(unit)
plt.xlabel('X')
plt.ylabel('Y')
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句