heatmap-annotated.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. # Copyright 2021-2024 Avaiga Private Limited
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
  4. # the License. You may obtain a copy of the License at
  5. #
  6. # http://www.apache.org/licenses/LICENSE-2.0
  7. #
  8. # Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
  9. # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
  10. # specific language governing permissions and limitations under the License.
  11. # -----------------------------------------------------------------------------------------
  12. # To execute this script, make sure that the taipy-gui package is installed in your
  13. # Python environment and run:
  14. # python <script>
  15. # -----------------------------------------------------------------------------------------
  16. from typing import Dict, List
  17. from taipy.gui import Gui
  18. if __name__ == "__main__":
  19. data: Dict[str, List] = {
  20. "Temperatures": [
  21. [17.2, 27.4, 28.6, 21.5],
  22. [5.6, 15.1, 20.2, 8.1],
  23. [26.6, 22.8, 21.8, 24.0],
  24. [22.3, 15.5, 13.4, 19.6],
  25. ],
  26. "Cities": ["Hanoi", "Paris", "Rio", "Sydney"],
  27. "Seasons": ["Winter", "Spring", "Summer", "Autumn"],
  28. }
  29. layout = {
  30. # This array contains the information we want to display in the cells
  31. # These are filled later
  32. "annotations": [],
  33. # No ticks on the x axis, show labels on top the of the chart
  34. "xaxis": {"ticks": "", "side": "top"},
  35. # No ticks on the y axis
  36. # Add a space character for a small margin with the text
  37. "yaxis": {"ticks": "", "ticksuffix": " "},
  38. }
  39. seasons = data["Seasons"]
  40. cities = data["Cities"]
  41. # Iterate over all cities
  42. for city in range(len(cities)):
  43. # Iterate over all seasons
  44. for season in range(len(seasons)):
  45. temperature = data["Temperatures"][city][season]
  46. # Create the annotation
  47. annotation = {
  48. # The name of the season
  49. "x": seasons[season],
  50. # The name of the city
  51. "y": cities[city],
  52. # The temperature, as a formatted string
  53. "text": f"{temperature}\N{DEGREE SIGN}C",
  54. # Change the text color depending on the temperature
  55. # so it results in a better contrast
  56. "font": {"color": "white" if temperature < 14 else "black"},
  57. # Remove the annotation arrow
  58. "showarrow": False,
  59. }
  60. # Add the annotation to the layout's annotations array
  61. layout["annotations"].append(annotation) # type: ignore[attr-defined]
  62. page = """
  63. ## Heatmap - Annotated
  64. <|{data}|chart|type=heatmap|z=Temperatures|x=Seasons|y=Cities|layout={layout}|>
  65. """
  66. Gui(page).run()