import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
data = {
'文物编号': ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '16', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56','57','58'],
'纹饰': ['C', 'A', 'A', 'A', 'A', 'A', 'B', 'C', 'B', 'B', 'C', 'B', 'C', 'C', 'C','A', 'A', 'A', 'A', 'B', 'A', 'C', 'C', 'C', 'B', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C','C', 'A','C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'C', 'A', 'C','C','C','C','C'],
'类型': ['高钾', '铅钡', '高钾', '高钾', '高钾', '高钾', '高钾', '铅钡', '高钾', '高钾', '铅钡', '高钾', '高钾', '高钾', '高钾', '高钾', '铅钡', '铅钡', '高钾', '高钾', '铅钡', '铅钡', '铅钡', '铅钡', '高钾', '铅钡', '铅钡', '铅钡','铅钡', '铅钡', '铅钡', '铅钡', '铅钡', '铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡'],
'颜色': ['蓝绿', '浅蓝', '蓝绿', '蓝绿', '蓝绿', '蓝绿', '蓝绿', '紫', '蓝绿', '蓝绿', '浅蓝', '蓝绿', '浅绿', '深绿', '浅蓝', '深蓝', 'X','浅蓝', '蓝绿', '蓝绿', '蓝绿', '紫', '浅蓝', '紫', '蓝绿', '浅蓝', '浅蓝', '深蓝', '紫', '浅绿', '深绿', '深绿', '浅绿', '深绿', '深绿', '深绿', '深绿', 'X', '浅绿', '浅蓝', '浅蓝', '浅蓝', '浅蓝', '浅蓝', '浅蓝', 'X', '黑', '黑', '浅蓝','浅蓝','浅蓝','浅蓝','绿','蓝绿','蓝绿','X'],
'表面风化': ['无风化', '风化', '无风化', '无风化', '无风化', '无风化', '风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化','无风化', '风化', '无风化', '无风化', '风化', '风化', '无风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化', '无风化', '风化', '无风化', '风化', '无风化', '风化', '风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化', '风化', '风化', '风化','风化','风化','风化','风化','无风化','风化','风化','风化']
}
df = pd.DataFrame(data)
df.replace('X', np.nan, inplace=True)
plt.figure(figsize=(10, 6))
sns.lineplot(data=df[['纹饰', '类型', '颜色']])
plt.title('三线图 - 纹饰、类型、颜色的关系')
plt.xlabel('文物编号')
plt.ylabel('属性值')
plt.xticks(rotation=45)
plt.legend(title='属性')
plt.tight_layout()
plt.show()
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='纹饰', y='颜色', hue='表面风化', style='类型', palette='Set2')
plt.title('散点图 - 纹饰、颜色、表面风化和类型的关系')
plt.xlabel('纹饰')
plt.ylabel('颜色')
plt.legend(title='表面风化')
plt.tight_layout()
plt.show()
为什么会出现 'NoneType' object is not iterable的问题呢?请问如何解决这个问题呢?
我这里测试,将20行的data改了名字为data2,好像就可以了;
然后,增加了一点代码,让pyplot图标显示中文。
修改如下:
参考链接:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib
# https://blog.csdn.net/qi_yue_yu/article/details/90668030
# 让pyplot图标显示中文
font = {'family': 'SimHei', "size": 12}
matplotlib.rc('font', **font) # 一次定义终身使用
data = {
'文物编号': ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '16', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '50', '51', '52', '53', '54', '55', '56','57','58'],
'纹饰': ['C', 'A', 'A', 'A', 'A', 'A', 'B', 'C', 'B', 'B', 'C', 'B', 'C', 'C', 'C','A', 'A', 'A', 'A', 'B', 'A', 'C', 'C', 'C', 'B', 'A', 'A', 'A', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C', 'C','C', 'A','C', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'C', 'C', 'A', 'C','C','C','C','C'],
'类型': ['高钾', '铅钡', '高钾', '高钾', '高钾', '高钾', '高钾', '铅钡', '高钾', '高钾', '铅钡', '高钾', '高钾', '高钾', '高钾', '高钾', '铅钡', '铅钡', '高钾', '高钾', '铅钡', '铅钡', '铅钡', '铅钡', '高钾', '铅钡', '铅钡', '铅钡','铅钡', '铅钡', '铅钡', '铅钡', '铅钡', '铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡','铅钡'],
'颜色': ['蓝绿', '浅蓝', '蓝绿', '蓝绿', '蓝绿', '蓝绿', '蓝绿', '紫', '蓝绿', '蓝绿', '浅蓝', '蓝绿', '浅绿', '深绿', '浅蓝', '深蓝', 'X','浅蓝', '蓝绿', '蓝绿', '蓝绿', '紫', '浅蓝', '紫', '蓝绿', '浅蓝', '浅蓝', '深蓝', '紫', '浅绿', '深绿', '深绿', '浅绿', '深绿', '深绿', '深绿', '深绿', 'X', '浅绿', '浅蓝', '浅蓝', '浅蓝', '浅蓝', '浅蓝', '浅蓝', 'X', '黑', '黑', '浅蓝','浅蓝','浅蓝','浅蓝','绿','蓝绿','蓝绿','X'],
'表面风化': ['无风化', '风化', '无风化', '无风化', '无风化', '无风化', '风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化','无风化', '风化', '无风化', '无风化', '风化', '风化', '无风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化', '无风化', '风化', '无风化', '风化', '无风化', '风化', '风化', '风化', '风化', '风化', '风化', '风化', '无风化', '无风化', '无风化', '风化', '风化', '风化','风化','风化','风化','风化','无风化','风化','风化','风化']
}
#df = pd.DataFrame(data,columns=['文物编号','纹饰','类型','颜色','表面风化'])
df = pd.DataFrame(data)
#print(df)
df.replace('X', np.nan, inplace=True)
plt.figure(figsize=(10, 6))
# https://zhuanlan.zhihu.com/p/138789910
sns.lineplot(data2=df[['纹饰', '类型', '颜色']])
# https://blog.csdn.net/qi_yue_yu/article/details/90668030
font = {'family': 'SimHei', "size": 12}
matplotlib.rc('font', **font) # 一次定义终身使用
plt.title('三线图 - 纹饰、类型、颜色的关系')
plt.xlabel('文物编号')
plt.ylabel('属性值')
plt.xticks(rotation=45)
plt.legend(title='属性')
plt.tight_layout()
plt.show()
plt.figure(figsize=(10, 6))
sns.scatterplot(data=df, x='纹饰', y='颜色', hue='表面风化', style='类型', palette='Set2')
plt.title('散点图 - 纹饰、颜色、表面风化和类型的关系')
plt.xlabel('纹饰')
plt.ylabel('颜色')
plt.legend(title='表面风化')
plt.tight_layout()
plt.show()
【以下回答由 GPT 生成】
这个问题的原因是在使用循环迭代时,data变量的类型是一个字典(dictionary),而字典在迭代时默认只会迭代它的键(keys)。因此在循环迭代data时,实际上只会迭代字典的键,而不是值。
如果你想要迭代字典的值,可以使用data.values()方法:
for item in data.values():
print(item)
但是,根据你的代码,data是一个包含两个键值对(‘文物编号’和‘纹饰’)的字典。如果你想要同时迭代键和值,可以使用data.items()方法:
for key, value in data.items():
print(key, value)
这样,你就可以同时获取键和值了。希望这个解决方案对你有帮助。