heatmap_annotated.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. # Copyright 2021-2025 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. data: Dict[str, List] = {
  19. "Temperatures": [
  20. [17.2, 27.4, 28.6, 21.5],
  21. [5.6, 15.1, 20.2, 8.1],
  22. [26.6, 22.8, 21.8, 24.0],
  23. [22.3, 15.5, 13.4, 19.6],
  24. ],
  25. "Cities": ["Hanoi", "Paris", "Rio", "Sydney"],
  26. "Seasons": ["Winter", "Spring", "Summer", "Autumn"],
  27. }
  28. layout = {
  29. # This array contains the information we want to display in the cells
  30. # These are filled later
  31. "annotations": [],
  32. # No ticks on the x axis, show labels on top the of the chart
  33. "xaxis": {"ticks": "", "side": "top"},
  34. # No ticks on the y axis
  35. # Add a space character for a small margin with the text
  36. "yaxis": {"ticks": "", "ticksuffix": " "},
  37. }
  38. seasons = data["Seasons"]
  39. cities = data["Cities"]
  40. # Iterate over all cities
  41. for city in range(len(cities)):
  42. # Iterate over all seasons
  43. for season in range(len(seasons)):
  44. temperature = data["Temperatures"][city][season]
  45. # Create the annotation
  46. annotation = {
  47. # The name of the season
  48. "x": seasons[season],
  49. # The name of the city
  50. "y": cities[city],
  51. # The temperature, as a formatted string
  52. "text": f"{temperature}\N{DEGREE SIGN}C",
  53. # Change the text color depending on the temperature
  54. # so it results in a better contrast
  55. "font": {"color": "white" if temperature < 14 else "black"},
  56. # Remove the annotation arrow
  57. "showarrow": False,
  58. }
  59. # Add the annotation to the layout's annotations array
  60. layout["annotations"].append(annotation) # type: ignore[attr-defined]
  61. page = """
  62. <|{data}|chart|type=heatmap|z=Temperatures|x=Seasons|y=Cities|layout={layout}|>
  63. """
  64. if __name__ == "__main__":
  65. Gui(page).run(title="Chart - Heatmap - Annotated")