【问题标题】:How do I get a floating point value to show up in Google Chart?如何让浮点值显示在 Google 图表中?
【发布时间】:2021-07-20 23:53:31
【问题描述】:

免责声明:我对 Python 和 Javascript 都很陌生,所以请记住这一点...

我正在使用连接到空气质量传感器的 Raspberry Pi 来收集 PM2.5 和 PM10 值。我已经有代码收集原始 PM 数据,然后将其转换为显示在网页上的 AQI 数字 (https://openschoolsolutions.org/measure-particulate-matter-with-a-raspberry-pi/)。但是它收集的历史数据显示在一个表格中,我真的希望将其显示为图表。该表显示了 PM2.5 和 PM10 的原始 PM 数据以及计算得出的 AQI 数值。

原始 PM 数据收集在 .json 文件中,但它仅包含原始 PM 数据,而不包含计算的 AQI 数字。我的意图是仅显示 AQI 数字随时间变化的图表。为此,我修改了 Python 代码以计算 AQI 值并将该数据以及原始 PM 数据保存到 .json 文件中。

一开始,PM10 AQI 数字都是“0”。原来是因为 AQI 计算中的值之一小于 1,所以 Python 向下舍入为“0”。这是执行 AQI 计算的代码:

def calcAQIpm10(pm10):
pm1 = 0
pm2 = 54
pm3 = 154
pm4 = 254
pm5 = 354
pm6 = 424
pm7 = 504
pm8 = 604

aqi1 = 0
aqi2 = 50
aqi3 = 100
aqi4 = 150
aqi5 = 200
aqi6 = 300
aqi7 = 400
aqi8 = 500

aqipm10 = 0

if (pm10 >= pm1 and pm10 <= pm2):
    aqipm10 = ((aqi2 - aqi1) / float((pm2 - pm1))) * (pm10 - pm1) + aqi1
elif (pm10 >= pm2 and pm10 <= pm3):
    aqipm10 = ((aqi3 - aqi2) / float((pm3 - pm2))) * (pm10 - pm2) + aqi2
elif (pm10 >= pm3 and pm10 <= pm4):
    aqipm10 = ((aqi4 - aqi3) / float((pm4 - pm3))) * (pm10 - pm3) + aqi3
elif (pm10 >= pm4 and pm10 <= pm5):
    aqipm10 = ((aqi5 - aqi4) / float((pm5 - pm4))) * (pm10 - pm4) + aqi4
elif (pm10 >= pm5 and pm10 <= pm6):
    aqipm10 = ((aqi6 - aqi5) / float((pm6 - pm5))) * (pm10 - pm5) + aqi5
elif (pm10 >= pm6 and pm10 <= pm7):
    aqipm10 = ((aqi7 - aqi6) / float((pm7 - pm6))) * (pm10 - pm6) + aqi6
elif (pm10 >= pm7 and pm10 <= pm8):
    aqipm10 = ((aqi8 - aqi7) / float((pm8 - pm7))) * (pm10 - pm7) + aqi7

#print("pm10 = ", pm10, " aqipm10 = ", aqipm10)
return format(aqipm10, '.2f')

我通过将分母转换为浮点数并将值作为带 2 个小数位的浮点数返回来解决了这个问题。如果我打印出进入 .json 文件的值,它们看起来就很好:

PM2.5:  0.3 , PM10:  0.4 , aqiPM2.5:  1.2 , aqiPM10:  0.37

但是当我查看实际的 .json 文件时,我看到了这个(不是相同的数据 - 只需查看格式):

[{"aqipm10": "1.76", "time": "07/19/2021 20:42:32", "aqipm25": 4.0, "pm10": 1.9, "pm25": 1.0},

请注意,aqipm10 的值用引号引起来。其他值没有引号。当我使用 Google Chart 绘制值时,除了 aqipm10 值之外的所有值都会显示。但是,如果我创建了一个已编辑的 .json 文件,并在其中删除了 aqipm10 值中的引号,那么这些值就会显示在图表上。

在从计算值并将其放入 .json 文件的 Python 代码过渡到读取 .json 文件的某个地方 - 使用 javascript 创建网页和 Google 图表 - 这些“浮动”的问题" 值弹出。我确信可能有几种方法可以解决这个问题,但我对 Python 和 Javascript 都很陌生,在这一点上会迷路。

想办法收拾这个烂摊子。

【问题讨论】:

    标签: javascript python json


    【解决方案1】:

    好吧,我确实说过我是 Python 新手...

    我的问题的解决方案其实很简单。我最初的 calcAQIpm10 例程“返回”语句是:

    return aqipm10
    

    这给了我一个很好的浮点值,但精度太高了。我将它(如我原来的帖子所示)替换为:

    return format(aqipm10, '.2f')
    

    这以正确的精度打印出正确的信息,但是当查看 .json 文件中的值时,它周围有双引号。

    在与朋友交谈后,他建议我查看可能满足我需要的 python 函数。我发现'round'函数做了正确的把戏。所以现在代码如下:

    return round(aqipm10, 2)
    

    通过进行此更改,.json 文件中的值没有双引号,并且很好地传递给了我正在使用的 Google Chart 代码。

    抱歉浪费了带宽。

    瑞克

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多