szjuliet 发表于 2023-9-16 22:35:18

【App Inventor数据可视化】使用电子表格和图表3:通过比较...

本帖最后由 szjuliet 于 2023-9-22 20:06 编辑

【App Inventor数据可视化】使用电子表格和图表
Part 3:通过比较多个例子收集证据


[*]编码电子表格组件
[*]编码图表来比较不同湖泊的数据
Part 1:通过图表理解数据
Part 2:通过比较数据集加深理解
Part 3:通过比较多个例子收集证据
Part 4:在App中添加数学模型
附录A:将app连接到自己的数据集
附录B:为Google表格创建一个凭证


## Part 3:通过比较多个例子收集证据

到目前为止,Janelle只研究了Spirit Lake的数据。但她当地的湖泊只是地球上数百万个湖泊中的一个。你认为Janelle接下来应该做些什么来论证她所看到的趋势在冬季湖泊中很常见?

如果Spirit Lake的冰真的在减少,这将对她在游泳时湖水中的藻类产生影响。冬天的冰让湖水一整年都更冷些。更温暖的海水使藻类等植物生长得更快。

然而,作为一名科学家,Janelle 告诉自己,她需要为这些趋势提供更多的证据。她问自己:“随着时间的推移,其他湖泊是否也经历着与Spirit Lake相同的变化?”Janelle 在她的app中添加了一个新屏幕来比较多个样本或案例。

与第一个屏幕一样,这个屏幕也有两个图表。不过这个屏幕不是显示同一湖泊的冰和温度,而是显示两个不同湖泊的冰的数据。

### 1. 向模板添加一个新屏幕。

* 点击菜单中的“添加屏幕”按钮,将新屏幕命名为“**multiCaseScreen**”。

* 新的空屏幕目前为止没有任何组件和代码。
![](https://markdown.liuchengtu.com/work/uploads/upload_553cf18fe447733af71986ea3b486a05.png)

###2. 快速建立新设计(使用复制粘贴)

* 该app将需要两个图表来显示冰期数据,就像Part 2一样。为了节省时间,按照下面的步骤从singleCaseScreen复制和粘贴相同的组件。然后,根据需要修改组件。

    * 切换到singleCaseScreen:
![](https://markdown.liuchengtu.com/work/uploads/upload_ac7521238ea720cd7e7b0dc59c0bbd2a.png)

    * 在singleCaseScreen上,在“组件”中选择屏幕名称,然后在计算机上按“复制”键(Ctrl-c或⌘-c):
![](https://markdown.liuchengtu.com/work/uploads/upload_f5e1cf005872fc221eb6a29a05e367b7.png)

    * 回到新的**multiCaseScreen**,然后在设计器的任何地方点击粘贴到计算机上(Ctrl-v或⌘-v)。来自singleCaseScreen屏幕的所有组件都应该自动填充:
![](https://markdown.liuchengtu.com/work/uploads/upload_0bf8d33a6a9f87c84f9732e8ca7c0d8a.png)

    * app将使用新屏幕比较两个湖上的冰。首先,修复一些与剪切粘贴一起出现的旧标签。

      * 在**bottomChart**的属性中,将描述改为“冰期”:
![](https://markdown.liuchengtu.com/work/uploads/upload_e4f1c09c927818754fe9d090817760bc.png)

      * 在bottomChartData2D的属性中,将标签更改为“天数”:
![](https://markdown.liuchengtu.com/work/uploads/upload_96a366dbf24c44650643fafda009abe0.png)

### 3. 添加Spreadsheet组件(新技能)

* 在前面的屏幕复制粘贴中,Spreadsheet1组件已经复制到当前屏幕中

* 但在当前屏幕下,你**需要在两个不同的表格上比较两个湖泊**。这意味着该app将需要另一个Spreadsheet组件来保存来自不同来源的信息。
![](https://markdown.liuchengtu.com/work/uploads/upload_653d72df4bcd7db5b5935b76e6f31076.png)

* 使用复制和粘贴方法创建另一个Spreadsheet组件节省时间。选中组件Spreadsheet1,按复制(Ctrl-c或⌘-c)和粘贴(Ctrl-v或⌘-v)
![](https://markdown.liuchengtu.com/work/uploads/upload_87ea0ee1205641bd0b359b4716ccdfea.png)

* **注意,使用复制粘贴会保留一些重要的属性,比如Spreadsheet的id**。

* 自己创建这个来访问自己的电子表格是一项重要的技能,在附录A中有介绍。

* 现在,这些设置会在Janelle的示例App中正常工作。

### 4. 完成屏幕1的代码。

* 切换到屏幕1:
![](https://markdown.liuchengtu.com/work/uploads/upload_b3b03d94a4206fb796b10e5e3a8c2d1c.png)

* 使你的新multiCaseScreen可从Screen1访问。参照下图中上面的代码块作为示例来填充下面的代码块:
![](https://markdown.liuchengtu.com/work/uploads/upload_0899997fe9a623d59173d51ef005cb58.png)

* 当你完成后,两个按钮的代码应该在主屏幕上工作。

### 5. 完成multiCaseScreen代码。

* 当你将组件粘贴到组件设计工作面板中后,任何相关的代码都会自动出现在逻辑设计工作面板中。你可以在multiCaseScreen中看到这段代码:
![](https://markdown.liuchengtu.com/work/uploads/upload_fbe0ac5f1e9bbb1e4ea70a73c4406bc8.png)

    * 现在有一个问题:你粘贴的代码让两个不同的图表读取相同的工作表 **spiritLake**。如何从不同的工作表(工作薄中不同的湖泊)读取数据?

    * 设置代码以使用不同的数据源。从“**Spreadsheet2**”抽屉中,拖动另一个**ReadSheet** :
![](https://markdown.liuchengtu.com/work/uploads/upload_8a2d6d5f34c4edc95e112caec72d36bb.png)

    * 使用[电子表格](https://docs.google.com/spreadsheets/d/1vF7NgXlofxEBefsOCv1ndQBEjHMVubSBsyKQdUtQMRQ)上的工作表名称作为指导,在“**ReadSheet**”代码块中填写另一个工作表名称。记得检查你的拼写。(尤其是当你拼写“otsegoLake”的时候!)
![](https://markdown.liuchengtu.com/work/uploads/upload_9d0112b90c4455935e31ac75d58a19fc.png)

    * 用新的湖泊名称更新**bottomLake**标签:
![](https://markdown.liuchengtu.com/work/uploads/upload_baff5627f94947e2095dbf47db9a990c.png)

    * <font class="text-color-4" color="#673ab7">**bottomChartData2D.ImportFromSpreadsheet**</font>代码块仍然从Sheet1中抓取数据。改为从**spreadsheet2**导入:
![](https://markdown.liuchengtu.com/work/uploads/upload_92f0a13fcc880bf3419f88838cb5b3c2.png)

    * 在这个例子中,新的图表应该比较两个湖泊的冰量数据。因此,删除yColumn中的“Temp”(如图所示),并将列标题更改为“冰期”。
![](https://markdown.liuchengtu.com/work/uploads/upload_f7e454e41538803d9cf48b45b9cf7dff.png)

    * 最后,检查你的代码!注意 <font class="text-color-15" color="#ff9800">**spreadsheet1.GotSheetData**</font> 块运行时,它已经“got”了sheet1的信息。但是屏幕下方湖泊的spreadsheet2的信息呢?App如何知道spreadsheet2信息准备好了?从spreadsheet2的抽屉中,拖动另一个 <font class="text-color-15" color="#ff9800">**GotSheetData**</font>代码块:
![](https://markdown.liuchengtu.com/work/uploads/upload_c1779bf6cd962d9ea050a9e44778ff5d.png)


    * 将屏幕底部的湖(使用spreadsheet2信息的那个)的所有块 -- 标签块和<font class="text-color-4" color="#673ab7">**bottomChartData2D.ImportFromSpreadsheet**</font>块。移动到spreadsheet2的<font class="text-color-15" color="#ff9800">**GotSheetData**</font>块中(你可以在下面的测试框中检查最终代码。)   
![](https://markdown.liuchengtu.com/work/uploads/upload_4c213d1a0a75754f19c0af8419ea19f7.png)

| 测试你的代码                                                                                  |
| --------------------------------------------------------------------------------------------- |
| 按下**Show Data**按钮                                                                         |
| ![](https://markdown.liuchengtu.com/work/uploads/upload_31c18179b77226e01409ec6b8f2b7b09.png) |
| 如果多次按下后仍未看到图表,请检查代码:                                                      |
| ![](https://markdown.liuchengtu.com/work/uploads/upload_0fed3969cf0cf1f44f71d957ff8576ca.png) |

**讨论:但这是一个合理的比较吗?**

仔细观察这两个图表的y轴。

* 在每个例子中下,y轴是从哪里开始?

* y轴的不同原点如何改变你对这些图表上数据的观察和比较?

* 修改轴可以使数据更容易可视化,但重要的是在做比较的时候要确保图表没有失真 -- 或不真实!
![](https://markdown.liuchengtu.com/work/uploads/upload_ebc1b829a8ec0be614a2885769802637.png)

将y轴设置为0

* 使每个图表上的y轴相同。在组件设计面板中,单击topChart组件,勾选底部的属性 **YfromZero** 。

* 对bottomChart组件重复此操作。
![](https://markdown.liuchengtu.com/work/uploads/upload_7be937ffd4cad37c07bb24a0acb32954.png)

在设备上再次测试代码。(如果Companion已失去连接,请重新连接。)

* 这将如何改变 Spirit Lake数据的外观?

* 这将如何改变屏幕上下两个湖泊的比较?
![](https://markdown.liuchengtu.com/work/uploads/upload_6f5e5037d6bb5f60c551cbec509c94c0.png)


**讨论:数据可视化如何帮助我们更好地理解数据?**

看看屏幕上下这两张图表。

    沿着图表的x轴选择某个年份。该年两个湖的冰期有什么不同?
    你认为什么因素可以解释两个湖泊在同一年份的差异?
    将两个湖泊的数据图表放在一起比较有什么好处?
    除了湖泊数据,在未来的App中,你对可视化和比较哪些类型的数据感兴趣?

    (注:数据来源于Sharma, Sapna等人的研究。“冰盖减少,物候变化,以及北半球湖泊发生的更多极端事件。”地球物理学报:生物地球科学126.10 (2021):e2021JG006348。)
    ("Loss of ice cover, shifting phenology, and more extreme events in Northern Hemisphere lakes." Journal of Geophysical Research: Biogeosciences 126.10 (2021): e2021JG006348. )

**Part 3额外挑战**:同时展示两张图

有时,你可能希望在同一图表中同时显示两个图形,以便于比较。如何在组件设计中排列ChartData2D组件以使它们显示在相同的空间中?
![](https://markdown.liuchengtu.com/work/uploads/upload_8b434ec84335ad0abe6382a9fde0899e.png)
页: [1]
查看完整版本: 【App Inventor数据可视化】使用电子表格和图表3:通过比较...