To combine different plots in vega, we needed to create a layout with a marks section which itself contained other marks (see here).

...
"layout": {"padding": 20},
  "marks": [
    {
      "type": "group",
      "encode": {
        "update": {
          "width": {"value": 200},
          "height": {"value": 200}
        }
      },
      "marks": [
        {
          "type": "symbol",
          ...
        }
      ],
      "axes": [
        ...
      ]
    },
    {
      "type": "group",
      "style": "cell",
      "encode": {
        "update": {
          "width":  {"value": 200},
          "height": {"value": 200}
        }
      },
      "marks": [
        {
          "type": "symbol",
          ...
        }
      ],
      "axes": [
        ...
      ]
    }
  ]
}
...

It’s not easy to keep an overview of what’s going on here, but panel makes things much more clear. We can layout different panes into a panel with rows, columns or tabs with pn.Column(), pn.Row() and pn.Tabs(), respectively. For example:

pn.Column(pn.pane.Markdown("# My title"),
          pn.pane.Markdown("Some text"))

We can make the layout more complex by combining different tags:

pn.Column(pn.pane.Markdown("# My title"),
          pn.Row(pn.pane.Markdown("Some text"),
                 pn.pane.Markdown("Some other text")))

…and combining different types of panes:

pn.Column(pn.pane.Markdown("# My title"),
          pn.Row(pn.pane.Markdown("The first hit when I search google images for the text 'panel'"),
                 pn.pane.JPG("https://5.imimg.com/data5/PA/LN/MY-13921/dol-starter-panel-500x500.jpg")))

Exercise - Try out different layouts, including tabs.