鱼C论坛

 找回密码
 立即注册
查看: 1899|回复: 8

[已解决]问题出在哪里?

[复制链接]
发表于 2021-11-21 12:27:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教python数据分析高手,这段代码错在哪里?:

import matplotlib.pyplot as plt
labels='蛋白质','碳水','脂肪','维生素'
sizes=[30,45,20,5]
explode=(0,0.1,0,0)
plt.pie(sizes,labels,explode=explode,autopct='%1.1f%%',shadow='True',startangle=90)
plt.show()

运行后一直提醒如下错误:

File "<ipython-input-8-13771d9d2244>", line 5, in <module>
    plt.pie(sizes,labels,explode=explode,autopct='%1.1f%%',shadow='True',startangle=90)

TypeError: pie() got multiple values for argument 'explode'
最佳答案
2021-11-21 12:38:01
官网说除了x都是关键字参数,所以labels得加关键字。
  1. import matplotlib.pyplot as plt
  2. import matplotlib as mpl


  3. mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
  4. mpl.rcParams['axes.unicode_minus'] = False


  5. labels = '蛋白质', '碳水', '脂肪', '维生素'
  6. sizes = [30, 45, 20, 5]
  7. explode = (0, 0.1, 0, 0)
  8. plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%', shadow='True', startangle=90)
  9. plt.show()
复制代码

https://matplotlib.org/3.3.1/api ... tplotlib.pyplot.pie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-21 12:38:01 | 显示全部楼层    本楼为最佳答案   
官网说除了x都是关键字参数,所以labels得加关键字。
  1. import matplotlib.pyplot as plt
  2. import matplotlib as mpl


  3. mpl.rcParams['font.sans-serif'] = ['Microsoft YaHei']
  4. mpl.rcParams['axes.unicode_minus'] = False


  5. labels = '蛋白质', '碳水', '脂肪', '维生素'
  6. sizes = [30, 45, 20, 5]
  7. explode = (0, 0.1, 0, 0)
  8. plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%', shadow='True', startangle=90)
  9. plt.show()
复制代码

https://matplotlib.org/3.3.1/api ... tplotlib.pyplot.pie
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-21 14:15:55 | 显示全部楼层
错误的提示是:参数explode得到多个值。

你的代码和我的一样啊,我复制了去spider运行,出现一样的错误提示。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-21 14:18:37 | 显示全部楼层
哦,不是,是我错了。二楼的代码是对的!谢谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-21 14:19:18 | 显示全部楼层
但是,我没搞懂为什么........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-21 15:19:46 | 显示全部楼层
本帖最后由 阿奇_o 于 2021-11-21 15:26 编辑
Geeker_odd 发表于 2021-11-21 14:19
但是,我没搞懂为什么........


原理是"位置参数"与"关键字参数"的区别:
当你没写形参labels时,就是位置参数的写法,这时 第二个位置的位置参数 其实是explode,而不是你以为的labels,
而你传入的是labels这个实参(含了多个值),但位置参数explode 要接收的是 一个包含分数的 类数组的实参对象(如列表,元组等),
所以报错:参数explode接收到了多个值,也就是它接收到了 labels指向的多个值,这并不是它需要的。
后面的参数就根本不接收了(第二个位置的参数已经出错了,就停止处理后面的了)

根据这个原理,下面几种写法都可以:
  1. plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%', shadow='True', startangle=90)  
  2. plt.pie(sizes, explode, labels=labels, autopct='%1.1f%%', shadow='True', startangle=90)
  3. plt.pie(sizes, explode, labels, autopct='%1.1f%%', shadow='True', startangle=90)
复制代码


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-21 15:19:48 | 显示全部楼层
Geeker_odd 发表于 2021-11-21 14:19
但是,我没搞懂为什么........

看官网说明里的参数: matplotlib.pyplot.pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=0, radius=1, counterclock=True, wedgeprops=None, textprops=None, center=0, 0, frame=False, rotatelabels=False, *, normalize=None, data=None)
第一个x,就是x轴,explode就是y的数据,labels是label,除x外都是关键字参数。
在你的旧代码里是这样写的,plt.pie(sizes,labels,explode=explode,autopct='%1.1f%%',shadow='True',startangle=90)
因为你传参没有写明关键字,labels默认就赋值给了explode,所以有报错。这个是函数传参基础。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-23 11:51:36 | 显示全部楼层
非常感谢两位!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-23 20:18:02 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表