我一直在绘制一些图,然后收到以下代码的上述错误:
lag = range(0, 31)
djia_acf = []
for l in lag:
djia_acf.append(djia_df['Close'].autocorr(l))
plt.figure(figsize = (5.5, 5.5))
g = sns.pointplot(x=lag, y=djia_acf, markers = '.')
g.set_title('Autocorrelation function for DJIA')
g.set_xlabel('Lag in terms of number of trading days')
g.set_ylabel('Autocorrelation Function')
g.set_xticklabels(lag, rotation = 90)
TypeError Traceback (most recent call last)
<ipython-input-42-3ca28bdcaeea> in <module>()
1 plt.figure(figsize = (5.5, 5.5))
----> 2 g = sns.pointplot(x=lag, y=djia_acf, markers = '.')
3 g.set_title('Autocorrelation function for DJIA')
4 g.set_xlabel('Lag in terms of number of trading days')
5 g.set_ylabel('Autocorrelation Function')
/home/aspiring1/anaconda3/lib/python3.6/site-packages/seaborn/categorical.py in pointplot(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, markers, linestyles, dodge, join, scale, orient, color, palette, ax, errwidth, capsize, **kwargs)
3065 estimator, ci, n_boot, units,
3066 markers, linestyles, dodge, join, scale,
-> 3067 orient, color, palette, errwidth, capsize)
3068
3069 if ax is None:
/home/aspiring1/anaconda3/lib/python3.6/site-packages/seaborn/categorical.py in __init__(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, markers, linestyles, dodge, join, scale, orient, color, palette, errwidth, capsize)
1607 """Initialize the plotter."""
1608 self.establish_variables(x, y, hue, data, orient,
-> 1609 order, hue_order, units)
1610 self.establish_colors(color, palette, 1)
1611 self.estimate_statistic(estimator, ci, n_boot)
/home/aspiring1/anaconda3/lib/python3.6/site-packages/seaborn/categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units)
201 # Group the numeric data
202 plot_data, value_label = self._group_longform(vals, groups,
--> 203 group_names)
204
205 # Now handle the hue levels for nested ordering
/home/aspiring1/anaconda3/lib/python3.6/site-packages/seaborn/categorical.py in _group_longform(self, vals, grouper, order)
243
244 # Group the val data
--> 245 grouped_vals = vals.groupby(grouper)
246 out_data = []
247 for g in order:
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/generic.py in groupby(self, by, axis, level, as_index, sort, group_keys, squeeze, **kwargs)
4269 return groupby(self, by=by, axis=axis, level=level, as_index=as_index,
4270 sort=sort, group_keys=group_keys, squeeze=squeeze,
-> 4271 **kwargs)
4272
4273 def asfreq(self, freq, method=None, how=None, normalize=False,
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in groupby(obj, by, **kwds)
1624 raise TypeError('invalid type: %s' % type(obj))
1625
-> 1626 return klass(obj, by, **kwds)
1627
1628
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in __init__(self, obj, keys, axis, level, grouper, exclusions, selection, as_index, sort, group_keys, squeeze, **kwargs)
390 level=level,
391 sort=sort,
--> 392 mutated=self.mutated)
393
394 self.obj = obj
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in _get_grouper(obj, key, axis, level, sort, mutated)
2636 sort=sort,
2637 in_axis=in_axis) \
-> 2638 if not isinstance(gpr, Grouping) else gpr
2639
2640 groupings.append(ping)
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/groupby.py in __init__(self, index, grouper, obj, name, level, sort, in_axis)
2418 t = self.name or str(type(self.grouper))
2419 raise ValueError("Grouper for '%s' not 1-dimensional" % t)
-> 2420 self.grouper = self.index.map(self.grouper)
2421 if not (hasattr(self.grouper, "__len__") and
2422 len(self.grouper) == len(self.index)):
/home/aspiring1/anaconda3/lib/python3.6/site-packages/pandas/core/indexes/base.py in map(self, mapper)
2725 """
2726 from .multi import MultiIndex
-> 2727 mapped_values = self._arrmap(self.values, mapper)
2728 attributes = self._get_attributes_dict()
2729 if mapped_values.size and isinstance(mapped_values[0], tuple):
pandas/_libs/algos_common_helper.pxi in pandas._libs.algos.arrmap_int64 (pandas/_libs/algos.c:41758)()
TypeError: 'range' object is not callable
<matplotlib.figure.Figure at 0x7f1fa7c2ab70>
在上面的代码中,我只是尝试使用seaborn绘制点图,但是它给出了不能调用范围对象的错误,我见过类似的帖子,其中包含错误
“列表对象不可调用”
但是,在这里我看不到调用范围对象 lag 的任何地方。 使用x = np.array(lag)为我提供了所需的绘图,并带有以下输出,不知道为什么?
[<matplotlib.text.Text at 0x7f1fa7d38208>,
<matplotlib.text.Text at 0x7f1fa7d38ef0>,
<matplotlib.text.Text at 0x7f1fa7c61208>,
<matplotlib.text.Text at 0x7f1fa7c61cc0>,
<matplotlib.text.Text at 0x7f1fa7c696d8>,
<matplotlib.text.Text at 0x7f1fa7c711d0>,
<matplotlib.text.Text at 0x7f1fa7c71c88>,
<matplotlib.text.Text at 0x7f1fa7c75780>,
<matplotlib.text.Text at 0x7f1fa7c7c278>,
<matplotlib.text.Text at 0x7f1fa7c7cd30>,
<matplotlib.text.Text at 0x7f1fa7c02828>,
<matplotlib.text.Text at 0x7f1fa7c08320>,
<matplotlib.text.Text at 0x7f1fa7c08dd8>,
<matplotlib.text.Text at 0x7f1fa7c0c8d0>,
<matplotlib.text.Text at 0x7f1fa7c123c8>,
<matplotlib.text.Text at 0x7f1fa7c12e80>,
<matplotlib.text.Text at 0x7f1fa7c1a978>,
<matplotlib.text.Text at 0x7f1fa7c1e470>,
<matplotlib.text.Text at 0x7f1fa7c1ef28>,
<matplotlib.text.Text at 0x7f1fa7c25a20>,
<matplotlib.text.Text at 0x7f1fa7c2a518>,
<matplotlib.text.Text at 0x7f1fa7c2afd0>,
<matplotlib.text.Text at 0x7f1fa7c31ac8>,
<matplotlib.text.Text at 0x7f1fa7c385c0>,
<matplotlib.text.Text at 0x7f1fa7c3d0b8>,
<matplotlib.text.Text at 0x7f1fa7c3db70>,
<matplotlib.text.Text at 0x7f1fa7bc5668>,
<matplotlib.text.Text at 0x7f1fa7bc9160>,
<matplotlib.text.Text at 0x7f1fa7bc9c18>,
<matplotlib.text.Text at 0x7f1fa7bce710>,
<matplotlib.text.Text at 0x7f1fa7bd4208>]
我已经使用matplotlib.pyplot绘制了图,该图将范围对象作为x值,如下所示:
inflation = pd.read_excel('inflation-consumer-prices-annual.xlsx', parse_dates=['Year'])
plt.figure(figsize=(5.5, 5.5))
plt.plot(range(1960,2017), inflation['India'], linestyle='-', marker='*',
color='r')
plt.plot(range(1960,2017), inflation['United States'], linestyle='-',
marker='.', color='b')
plt.legend(['India','United States'], loc=1)
plt.title('Inflation in Consumer Price Index')
plt.ylabel('Inflation')
plt.xlabel('Years')
因此,我不知道为什么收到TypeError,因为它与matplotlib.pyplot一起使用,而调用range对象没有任何意义。
答案 0 :(得分:1)
在python 3中,range
返回一个迭代器,而不是列表本身。因此,以下内容不适用于python3。但是,适用于python 2。
import seaborn as sns
import matplotlib.pyplot as plt
x = range(9)
y = [1,2,3]*3
sns.pointplot(x=x, y=y, markers = '.')
plt.show()
但是,您可以通过range
将任何list(range(...))
转换为列表。因此,以下工作正常。
import seaborn as sns
import matplotlib.pyplot as plt
x = list(range(9))
y = [1,2,3]*3
sns.pointplot(x=x, y=y, markers = '.')
plt.show()