gpt4 book ai didi

postgresql - matplotlib 条形图 : How to spread bars evenly in a postgres-generate_series?

转载 作者:行者123 更新时间:2023-11-29 14:01:35 25 4
gpt4 key购买 nike

我正在使用 matplotlib 创建条形图并使用 psycopg2 连接到 postgres 数据库。

我想在条形图中绘制的数据来自具有以下 SQL 的 postgres 数据库:

SELECT  
(to_char(serie,'yyyy'))::text::int AS Year,
sum(amount)::numeric::int AS eintraege
FROM ( SELECT...) ... ;

sql 中的“serie”代表从 2006 年到 2012 年的 generate_series。这段代码在我的 python 脚本中用于绘制结果:

plt.bar(year, count, align='center')  
fig.autofmt_xdate()
plt.xticks(year, (year))
plt.xlabel('year')
plt.ylabel('V1M0')

这导致了这个情节:

enter image description here

到目前为止,我得到了我期望得到的 :-)

但是如果我在上面的 sql 中扩展我的 generate_series (to_char(serie,'yyyy') 这样它不仅会给我年份而且还会给我月份 ((to_char(serie,'yyyymm') 情节看起来有点奇怪:

enter image description here

我的印象是条形图是按年份分组的,因为我的数据库中只有一个 2006 年(2006 年 12 月)的条目,但 2007 年每个月都有一个值。

所以我的问题是:如何解决条形分布均匀的图(如第一个图)。我错过了什么吗?我在网上搜索了几个小时,但找不到解决问题的提示或解决方案。

如果您能提供任何帮助,我将不胜感激。

最佳答案

我没有找到此行为的真正原因,但有一个解决方法:
选择
(to_char(serie,'yyyymm'))::text AS Year,
sum(amount)::numeric::int AS eintraege
从(选择...)...;
不要将 generate_series 转换回整数,而是将列格式化为字符串。然后进行绘图,计算“plt.xticks”中字符串的长度

plt.bar(range(len(count)), count, align='center', label='Anzahl an erstellten Objekten')
fig.autofmt_xdate()
plt.xticks(range(len(count)), (year))
plt.xlabel('year')
plt.ylabel('V1M0')

现在情节看起来不错(不要介意轴标签,以后可以更改)。
http://geospatialview.de/wp-content/uploads/2012/11/Histogramm_komisch_geloest.png

关于postgresql - matplotlib 条形图 : How to spread bars evenly in a postgres-generate_series?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13287332/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com