我正在使用matplotlib创建一个条形图,并使用psycopg2连接到postgres数据库。
我想在条形图中绘制的数据来自postgres数据库,其中包含以下SQL:
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')
这导致了这个情节:
到目前为止,我得到了我期望得到的东西:-)
但是如果我在上面的sql中扩展我的generate_series(to_char(serie,'yyyy'),那么它不仅给了我几年而且给了几个月((to_char(serie,'yyyymm'),情节看起来有些奇怪:
我得到的印象是酒吧按年份分组,因为我在我的数据库中只有2006年(2006年12月)的一个条目,但2007年每个月都有一个值。
所以我的问题是:如何使用均匀分布的条形图来解析图形(如第一个图中所示)。我错过了什么吗?我在网上搜索了几个小时,但我找不到我的问题的提示或解决方案。
感谢您提供的任何帮助。
答案 0 :(得分:0)
我没有找到这种行为的实际原因而是一种解决方法:
SELECT
(to_char(serie,'yyyymm')):: text AS Year,
sum(amount):: numeric :: int AS eintraege
FROM(SELECT ...)...;
不要将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