import pandas as pd import matplotlib.pyplot as plt # 定义颜色字典 colors = {'哺乳动物': 'red', '爬行动物': 'green', '鸟类': 'blue', '鱼类': 'yellow'} data = pd.DataFrame({ '物种名称': ['熊猫', '狗', '兔子', '乌龟', '鬣狗', '企鹅', '蛇', '鸭子', '马', '鲨鱼'], '体长': [100, 60, 40, 50, 120, 70, 80, 60, 220, 400], '体重': [100, 30, 3, 20, 30, 40, 4, 3, 500, 700], '速度': [32, 56, 72, 5, 70, 10, 10, 16, 88, 45], '分类类型': ['哺乳动物', '哺乳动物', '哺乳动物', '爬行动物', '哺乳动物', '鸟类', '爬行动物', '鸟类', '哺乳动物', '鱼类'] }) # 定义2行2列的图形 fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 8)) # 1行1列的子图:横向柱形图 axs[0, 0].barh(data['物种名称'], data['体长'], color=[colors[x] for x in data['分类类型']]) axs[0, 0].set_xlabel('体长') axs[0, 0].set_ylabel('物种名称') axs[0, 0].set_title('各物种体长横向柱形图') # 1行2列的子图:折线图 axs[0, 1].plot(data['物种名称'], data['体重'], '-o', color=[colors[x] for x in data['分类类型']]) axs[0, 1].set_xlabel('物种名称') axs[0, 1].set_ylabel('体重') axs[0, 1].set_title('各物种体重折线图') # 2行1列的子图:散点图 axs[1, 0].scatter(data['物种名称'], data['速度'], c=[colors[x] for x in data['分类类型']]) axs[1, 0].set_xlabel('物种名称') axs[1, 0].set_ylabel('速度') axs[1, 0].set_title('各物种速度散点图') # 2行2列的子图:饼图 grouped_data = data.groupby('分类类型').size() axs[1, 1].pie(grouped_data, labels=grouped_data.index, autopct='%1.1f%%') axs[1, 1].set_title('各分类类型占比饼图') plt.tight_layout() plt.show()此代码报错为Traceback (most recent call last): File "C:/Users/lenovo/OneDrive/桌面/绘图/绘图1.py", line 85, in <module> axs[0, 1].plot(data['物种名称'], data['体重'], '-o', color=[colors[x] for x in data['分类类型']])raise ValueError(f"{v!r} is not a valid value for {k}") ValueError: ['red', 'red', 'red', 'green', 'red', 'blue', 'green', 'blue', 'red', 'yellow'] is not a valid value for color请解释错误原因并给出正确代码
时间: 2023-08-28 09:06:48 浏览: 131
错误原因是颜色列表中包含无效的字符串,应该是分类类型对应的颜色。正确的代码应该是:
```python
import pandas as pd
import matplotlib.pyplot as plt
# 定义颜色字典
colors = {'哺乳动物': 'red', '爬行动物': 'green', '鸟类': 'blue', '鱼类': 'yellow'}
data = pd.DataFrame({
'物种名称': ['熊猫', '狗', '兔子', '乌龟', '鬣狗', '企鹅', '蛇', '鸭子', '马', '鲨鱼'],
'体长': [100, 60, 40, 50, 120, 70, 80, 60, 220, 400],
'体重': [100, 30, 3, 20, 30, 40, 4, 3, 500, 700],
'速度': [32, 56, 72, 5, 70, 10, 10, 16, 88, 45],
'分类类型': ['哺乳动物', '哺乳动物', '哺乳动物', '爬行动物', '哺乳动物', '鸟类', '爬行动物', '鸟类', '哺乳动物', '鱼类']
})
# 定义2行2列的图形
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(12, 8))
# 1行1列的子图:横向柱形图
axs[0, 0].barh(data['物种名称'], data['体长'], color=[colors[x] for x in data['分类类型']])
axs[0, 0].set_xlabel('体长')
axs[0, 0].set_ylabel('物种名称')
axs[0, 0].set_title('各物种体长横向柱形图')
# 1行2列的子图:折线图
axs[0, 1].plot(data['物种名称'], data['体重'], '-o', color=[colors[x] for x in data['分类类型'].tolist()])
axs[0, 1].set_xlabel('物种名称')
axs[0, 1].set_ylabel('体重')
axs[0, 1].set_title('各物种体重折线图')
# 2行1列的子图:散点图
axs[1, 0].scatter(data['物种名称'], data['速度'], c=[colors[x] for x in data['分类类型']])
axs[1, 0].set_xlabel('物种名称')
axs[1, 0].set_ylabel('速度')
axs[1, 0].set_title('各物种速度散点图')
# 2行2列的子图:饼图
grouped_data = data.groupby('分类类型').size()
axs[1, 1].pie(grouped_data, labels=grouped_data.index, autopct='%1.1f%%')
axs[1, 1].set_title('各分类类型占比饼图')
plt.tight_layout()
plt.show()
```
在第 82 行,我们需要将 Series 对象转换为列表对象,我们使用 `tolist()` 方法实现此操作。
阅读全文