在尝试使基本散点图代码正常工作时,我遇到了很多人谈论的问题:
错误:
ValueError:x和y的大小必须相同。
但是,我在这里找到的答案似乎并不能解决这一问题。这是代码。谁能发现我在做什么错?
数据:
import pandas as pd
iris = pd.read_csv('../week2/data/iris.csv')
iris.head()
产生如下输出:
输出
散点图代码:
%matplotlib inline
import matplotlib.pyplot as plt
PetalLength = iris['Petal.Length']
PetalWidth = iris['Petal.Width']
plt.rcParams['figure.figsize'] = 8, 6
plt.scatter(iris, PetalWidth, PetalLength)
plt.show
我运行了这段代码,以查看错误似乎在说什么,但一切看起来都一样:
print(PetalWidth.shape, PetalLength.shape)
print(type(PetalWidth), type(PetalLength))
print(len(PetalWidth), len(PetalLength))
以上输出此:
((150L,), (150L,))
(<type 'numpy.ndarray'>, <type 'numpy.ndarray'>)
(150, 150)
最后的细节,以防万一。我尝试根据我发现的堆栈溢出帖子将PetalWidth和PetalLength转换为列表,但这也没有帮助。任何帮助我使此代码正常工作的指导将不胜感激。
最佳答案
此帖子的评论似乎包含答案。虽然某些绘图类型需要传递数据集,然后x
和y
是数据集中的字段,但是散点图仅接受x
和y
参数,其中x和y是长度相等的数组,其中包含数据。因为在您的示例中整个数据集被视为x
,然后第二个参数(您认为是x
)被视为y
,所以很可能引发该错误。在这种比较中,整个数据集的形状就是引发错误的原因。
删除第一个参数(用于数据集),然后查看问题是否消失。
对于将来偶然发现此帖子的其他人,Stack Overflow上的其他人在传入x
和y
时遇到了此错误,其中x
和y
不是数组。甚至有一篇帖子中有人通过将x
和y
转换为列表来解决问题,但这可能不是推荐的解决方案。最后,如果数组x
和y
不包含相同数量的值(因此具有相同的长度),则肯定会发生此错误。
关于python - matplotlib散点图甚至x和y抛出错误,表明它们不是,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43109417/