Advertisement
Guest User

Bokeh plot of temperature

a guest
Feb 22nd, 2017
42
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.70 KB | None | 0 0
  1. # coding: utf-8
  2.  
  3. import sys
  4. import psycopg2
  5. import string
  6. import datetime
  7. from decimal import Decimal
  8. import time
  9. from time import gmtime, strftime
  10. import os
  11. from bokeh.plotting import figure, show, output_file
  12. from bokeh.models import PrintfTickFormatter
  13.  
  14. #Odpri povezavo z bazo
  15. db_con = psycopg2.connect(database='senzor', host='xxxxxxx', user='xxx', password='xxx')
  16.  
  17. cursor = db_con.cursor()
  18.  
  19. query = "set timezone to 'Europe/Ljubljana';"
  20. cursor.execute(query)
  21. db_con.commit()
  22.  
  23. query = """
  24. select date_trunc('hour', datumcas) as interv_start, date_trunc('hour', datumcas) + interval '1 hours' as interv_end, avg(temperatura)
  25. from temperatura
  26. where (datumcas >= current_date and datumcas < (current_date + interval '1 day')) group by date_trunc('hour', datumcas)
  27. order by interv_start;"""
  28. cursor.execute(query)
  29. db_con.commit()
  30. avg_hourly_temp = cursor.fetchall()
  31.  
  32. # Red sensor:
  33. query = """
  34. select date_trunc('hour', datumcas) as interv_start, date_trunc('hour', datumcas) + interval '1 hours' as interv_end, avg(temperatura)
  35. from temperatura
  36. where (datumcas >= current_date and datumcas < (current_date + interval '1 day')) and (ime_senzorja = 'rdeči') group by date_trunc('hour', datumcas)
  37. order by interv_start;"""
  38. cursor.execute(query)
  39. db_con.commit()
  40. avg_hourly_temp_red = cursor.fetchall()
  41.  
  42.  
  43. # Yellow sensor:
  44. query = """
  45. select date_trunc('hour', datumcas) as interv_start, date_trunc('hour', datumcas) + interval '1 hours' as interv_end, avg(temperatura)
  46. from temperatura
  47. where (datumcas >= current_date and datumcas < (current_date + interval '1 day'))
  48. and (ime_senzorja = 'rumeni') group by date_trunc('hour', datumcas)
  49. order by interv_start;"""
  50. cursor.execute(query)
  51. db_con.commit()
  52. avg_hourly_temp_yellow = cursor.fetchall()
  53.  
  54.  
  55. print "AVERAGE TEMPERATURE PER HOUR"
  56.  
  57. print "Average temperature per hour today:"
  58. for reading in avg_hourly_temp:
  59. print "Between %s and %s houraverage temperature was %s degrees C." % (reading[0].strftime("%H"), reading[1].strftime("%H"), round(reading[2],1))
  60.  
  61. # time intervals
  62. x = [row[0].hour for row in avg_hourly_temp]
  63. # average temerature on both sensors
  64. y = [row[2] for row in avg_hourly_temp]
  65. #temperature on single sensor only
  66. y_red = [row[2] for row in avg_hourly_temp_red]
  67. y_yellow = [row[2] for row in avg_hourly_temp_yellow]
  68.  
  69.  
  70. output_file("graf.html", title='Temperature measurment')
  71.  
  72. # todays date
  73. datum = reading[0].strftime("%-d. %-m. %Y")
  74.  
  75. labels = ['[%d-%d]' % (i, i+1) for i in x]
  76. p = figure(plot_width=900, plot_height=400, tools="save", x_range=(labels), y_range=(round(min(y),0)-1,round(max(y),0)+2), x_axis_location='above')
  77.  
  78. p.vbar(x=x, width=0.7, bottom=0, top=y, color="firebrick")
  79.  
  80. p.toolbar.logo = None
  81. #p.toolbar_location = None
  82. p.title.text_font_size = '20pt'
  83. p.title.text_font = 'helvetica'
  84. p.title.text = u'Temperature on a day %s' % datum
  85.  
  86. p.xaxis.axis_label='ura/hour'
  87. p.xaxis.axis_label_text_font_size = "10pt"
  88. p.xaxis.axis_label_text_font_style = "normal"
  89. p.xaxis[0].formatter = PrintfTickFormatter(format='%s')
  90. p.xaxis.major_label_orientation = "vertical"
  91.  
  92. p.yaxis.axis_label='temperatura/temperature'
  93. p.yaxis.axis_label_text_font_size = "12pt"
  94. p.yaxis.axis_label_text_font_style = "normal"
  95. p.yaxis[0].formatter = PrintfTickFormatter(format='%s °C')
  96.  
  97. p.line(x, y_red, line_width=2, line_color="red", legend="rdeči (red) senzor")
  98. p.circle(x, y_red, line_width=2, line_color="red", fill_color="red", size=4, legend="rdeči (red) senzor")
  99.  
  100. p.line(x, y_yellow, line_width=2, line_color="yellow", legend="rumeni (yellow) senzor")
  101. p.circle(x, y_yellow, line_width=2, line_color="yellow", fill_color="yellow", size=4, legend="rumeni (yellow) senzor")
  102.  
  103. show(p)
  104.  
  105. if db_con:
  106. db_con.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement