Python matplotlib 画直方图出错?

发布于 2022-09-05 01:07:08 字数 1866 浏览 12 评论 0

sql3 = 'select sum(comment_num) as  total_col,create_time from article GROUP BY create_time'
df = pd.read_sql(sql3, conn)
print(df)
# 总数
# N = 22
# 宽度
width = 0.45
# ind = np.arange(N)
plt.bar(df['create_time'], df['total_col'], width, color='r', label='total_col')
plt.xlabel(u"发表日期")
plt.ylabel(u"总评论数")
plt.title(u"每日发表文章的总评论数直方分布图")
plt.legend()
plt.show()

df:

   total_col create_time
0         2.0  2017-04-27
1         0.0  2017-05-09
2         3.0  2017-05-10
3         6.0  2017-05-11
4         3.0  2017-05-12
5         2.0  2017-05-13
6         1.0  2017-05-14
7         0.0  2017-05-15
8         5.0  2017-05-16
9         0.0  2017-05-17
10        1.0  2017-05-18
11        0.0  2017-05-19
12        6.0  2017-05-22
13        0.0  2017-05-24
14        1.0  2017-05-25
15        0.0  2017-05-26
16        6.0  2017-05-27
17        4.0  2017-05-29
18       16.0  2017-05-31
19        4.0  2017-06-02
20        2.0  2017-06-04
21        1.0  2017-06-05

错误:

Traceback (most recent call last):
  File "D:/PyCharm/py_scrapyjobbole/data_analysis.py", line 46, in <module>
    plt.bar(df['create_time'], df['total_col'], width, color='r', label='total_col')
  File "D:\python-3.5.2\lib\site-packages\matplotlib\pyplot.py", line 2704, in bar
    **kwargs)
  File "D:\python-3.5.2\lib\site-packages\matplotlib\__init__.py", line 1898, in inner
    return func(ax, *args, **kwargs)
  File "D:\python-3.5.2\lib\site-packages\matplotlib\axes\_axes.py", line 2105, in bar
    left = [left[i] - width[i] / 2. for i in xrange(len(left))]
  File "D:\python-3.5.2\lib\site-packages\matplotlib\axes\_axes.py", line 2105, in <listcomp>
    left = [left[i] - width[i] / 2. for i in xrange(len(left))]
TypeError: unsupported operand type(s) for -: 'datetime.date' and 'float'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈甜 2022-09-12 01:07:08

試試astype()轉換型別,參見stackoverflow

%matplotlib inline
import pandas as pd
df = pd.DataFrame.from_csv('timeseries.tsv', sep="\t")

df['total_col'] = df['total_col'].astype(float)
df['create_time'] = df['create_time'].astype('datetime64[D]')
df.set_index(['create_time']).plot(kind='bar')

图片描述

南…巷孤猫 2022-09-12 01:07:08
plt.bar(df['create_time'], df['total_col'], width, color='r', label='total_col')

里面的left, height参数应该是数值形的list,你现在df['create_time']传递的是时间类型的列表

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文