我试图在Python Data Science Essential一书中运行一个例子 . 但是,当我运行它时,它出现了错误 . 实际上,我刚开始学习python . 所以,我觉得修复这些错误很难 . 请帮我 . 这是代码:
In:
import pandas as pd
import numpy as np
In: colors = list()
In: palette = {0: "red", 1: "green", 2: "blue"}
In:
for c in np.nditer(iris.target): colors.append(palette[int(c)])
# using the palette dictionary, we convert
# each numeric class into a color string
In: dataframe = pd.DataFrame(iris.data,
columns=iris.feature_names)
In: scatterplot = pd.scatter_matrix(dataframe, alpha=0.3,
figsize=(10, 10), diagonal='hist', color=colors, marker='o',
grid=True)
这是错误:
ValueError Traceback(最近一次调用last)in()1 scatterplot = pd.scatter_matrix(dataframe,alpha = 0.3,----> 2 figsize =(10,10),diagonal ='hist',color = colors,marker ='o',grid = True)/Users/leeivan/anaconda/lib/python2.7/site-packages/pandas/tools/plotting.py in scatter_matrix(frame,alpha,figsize,ax,grid,diagonal,marker, density_kwds,hist_kwds,range_padding,** kwds)378 379 ax.scatter(df [b] [common],df [a] [common], - > 380 marker = marker,alpha = alpha,** kwds)381 382 ax.set_xlim(borders_list [j])/Users/leeivan/anaconda/lib/python2.7/site-packages/matplotlib/init.pyc in inner(ax,* args,** kwargs)1817 warnings.warn(msg% (label_namer,func.name),1818 RuntimeWarning,stacklevel = 2) - > 1819 return func(ax,* args,** kwargs)1820 pre_doc = inner.doc 1821如果pre_doc为None:/ Users / leeivan / anaconda / lib散点图中的/python2.7/site-packages/matplotlib/axes/_axes.pyc(self,x,y,s,c,marker,cmap,norm,vmin,vmax,alpha,linewidths,verts,edgecolors,** kwargs )3787 facecolors = c o 3788如果c不是None: - > 3789引发ValueError(“提供'c'kwarg或'color'kwarg”3790“但不是两者都有;它们不同,但“3791”它们的功能重叠 . “)ValueError:提供'c'kwarg或'color'kwarg但不是两者;它们不同但功能重叠 .
2 回答
所以我跟踪它,但这是我可以告诉你的 . kwarg 是将关键字参数传递给函数的时候 .
就在那里 color=colors 是一个关键字参数 . 现在在函数调用的某处,它看起来像 c 成为关键字参数 . 我不知道你怎么能改变它,但你可以摆脱你的 color Kwarg,这可能会解决现在的问题 . 否则,您需要查看堆栈跟踪中的那些函数,并找出 c 何时变为kwarg
我在jupyter和python 3.5中测试了下面的代码,它的工作原理 .
显然,参数
color
正在生成错误,而c
正在运行 . 另一方面,它可能是matplotlib中的一个错误 .这是我发现的,看看pandas功能:
因此,
colors
或c
似乎被传递给matplotlib
中的scatter
函数,作为函数调用中的**kwds
之一 .这是分散函数:
这里的参数是
c
而不是color
,但在其他部分color
被列为c
的替代品(如您所料) .我在matplotlib上发布了一个问题 . 我会随时通知你 .
NEWS as of 11/12/2016
经过一番讨论后,这个bug已被大熊猫接受并计划在下一个主要版本中修复 . 见here on github
基本上,当指定
c
时,c
被发送到matplotlib中的scatter
函数 . 指定color
时,会发送c
和color
,这会使matplotlib感到困惑 .按照建议的时间,使用
c
而不是color