A Guide to Jupyter Notebook Markdown


Jupyter Notebook is a powerful tool for data analysis and scientific computing that allows you to create and share documents that contain live code, equations, visualizations, and narrative text. One of the key features of Jupyter Notebook is its support for Markdown, a lightweight markup language that enables you to write formatted text using a plain-text editor.

Markdown is a popular choice for writing documentation, README files, and blog posts because it’s easy to learn and write. It uses simple syntax to format text such as headings, lists, bold and italic text, links, images, tables, and more. Markdown also supports LaTeX-style mathematical equations and code blocks.

In this guide, we’ll cover the basics of Markdown syntax in Jupyter Notebook. We’ll start with headings and paragraphs, then move on to formatting text with emphasis and strong emphasis. We’ll also cover creating lists, inserting links and images, adding code blocks, creating tables, and writing mathematical equations.

By the end of this guide, you’ll be able to use Markdown effectively in Jupyter Notebook to communicate your ideas clearly and concisely. So let’s get started!

What is Markdown?

Markdown is a lightweight markup language that allows you to format text using a simple syntax. It was created by John Gruber in 2004 with the goal of making it easy to write and read plain text that could be converted into HTML. Markdown is widely used in documentation, README files, and online forums like Reddit and GitHub.

One of the advantages of Markdown is its simplicity. With just a few characters, you can create headings, lists, links, images, code blocks, and more. Another advantage is its portability. Since Markdown files are plain text files, they can be easily shared and edited on any platform without the need for special software.

To use Markdown in Jupyter Notebook, you need to create a new cell and change its type from Code to Markdown. Then you can start writing Markdown syntax in the cell. To render the Markdown as formatted text, you need to run the cell by pressing Shift+Enter or by clicking on the Run button in the toolbar.

Here’s an example of some basic Markdown syntax:

# This is a level 1 heading
## This is a level 2 heading
### This is a level 3 heading

* This is an unordered list item
* This is another unordered list item

1. This is an ordered list item
2. This is another ordered list item

[This is a link](https://www.example.com)

![This is an image](image.png)

`print("This is inline code")`

print(“This is a code block”)

> This is a blockquote

Why use Jupyter Notebook for Markdown?

Jupyter Notebook is a powerful tool for data analysis, visualization, and presentation. One of the key features of Jupyter Notebook is its ability to render Markdown. Markdown is a lightweight markup language that allows you to format text using simple syntax.

Markdown is an excellent choice for creating reports, documentation, and presentations because it is easy to read and write. With Jupyter Notebook, you can create interactive documents that combine code, text, and visualizations in a single notebook.

Jupyter Notebook’s support for Markdown allows you to easily create professional-looking documents with minimal effort. You can use Markdown to format text, create headings, add images and links, and even write mathematical equations. You can change any cell to be Markdown by selecting from the dropdown menu:

In addition to being easy to use, Markdown is also highly customizable. You can customize the appearance of your document by using CSS styles or by using pre-built themes.

Basic Markdown Syntax

Markdown is a lightweight markup language that allows you to format text using simple syntax. In Jupyter Notebook, you can use Markdown cells to create rich-text documents that include headings, lists, tables, images, and more.

Here are some of the basic Markdown syntax elements that you can use in Jupyter Notebook:


Headers in Jupyter Notebook Markdown are used to create titles or subtitles for different sections of your document. There are six levels of headers available in Markdown, ranging from the largest and most important (level 1) to the smallest and least important (level 6).

To create a header, you simply add one or more hash symbols (#) before your text. The number of hash symbols you use determines the level of the header. For example, a level 1 header would be created with a single hash symbol (#), while a level 3 header would use three hash symbols (###).

Here is an example of how to create headers in Jupyter Notebook Markdown:

# Level 1 Header
## Level 2 Header
### Level 3 Header
#### Level 4 Header
##### Level 5 Header
###### Level 6 Header

It is worth noting that you can also create headers using underlines. To do this, simply underline your text with equal signs (=) for a level 1 header or hyphens (-) for a level 2 header.

Level 1 Header

Level 2 Header

Headers are useful for organizing your content and making it easier to navigate. By using different levels of headers, you can create a clear hierarchy of information and help your readers quickly find what they’re looking for.

Bold and Italics

In Jupyter Notebook Markdown, you can make your text bold or italicized. To make your text **bold**, simply surround the desired text with double asterisks, like this:

**This text will be bold**

To make your text *italicized*, surround the desired text with a single asterisk, like this:

*This text will be italicized*

You can also combine these two formats for ***bold and italicized*** text, like this:

***This text will be both bold and italicized***

It’s important to note that the number of asterisks used determines the level of emphasis. For example, using three asterisks instead of two creates a higher level of emphasis.


Lists are a great way to organize and present information in a structured manner. In Jupyter Notebook Markdown, you can create both ordered and unordered lists.

To create an unordered list, simply use a hyphen (-), plus sign (+), or asterisk (*) followed by a space before each item. For example:

- Item 1
- Item 2
- Item 3

This will generate the following output:

– Item 1
– Item 2
– Item 3

To create an ordered list, use numbers followed by a period (.) and a space before each item. For example:

1. First item
2. Second item
3. Third item

This will generate the following output:

1. First item
2. Second item
3. Third item

You can also nest lists within each other to create a hierarchical structure. To do this, simply indent the nested list items with one or more spaces.

- Main item 1
    - Subitem A
    - Subitem B
- Main item 2
    1. Subitem 1
    2. Subitem 2

This will generate the following output:

– Main item 1
– Subitem A
– Subitem B
– Main item 2
1. Subitem 1
2. Subitem 2

Overall, lists are a powerful tool for organizing content in Jupyter Notebook Markdown and can greatly enhance the readability of your documents.

Links and Images

Links and Images are essential components of any document. In Jupyter Notebook Markdown, we can add links and images easily.

To add a link, we use the following syntax:

[Link Text](URL)

For example, if we want to link to the Python website, we can use:

[Python Website](https://www.python.org/)

This will create a hyperlink with the text “Python Website” that will take us to the URL https://www.python.org/.

Similarly, to add an image, we use the following syntax:

![Alt Text](Image URL)

For example, if we want to add an image of a Python logo from a URL, we can use:

![Python Logo](https://www.python.org/static/community_logos/python-logo.png)

This will display the Python logo in our Markdown cell.

We can also resize the image by adding HTML attributes to the Markdown cell. For example, to resize the Python logo by 50%, we can use:

<img src="https://www.python.org/static/community_logos/python-logo.png" alt="Python Logo" width="50%">

In this way, we can add links and images to our Jupyter Notebook Markdown documents.

Code Blocks

Jupyter Notebook Markdown supports the inclusion of code blocks to display code snippets. To create a code block, simply indent each line of the code snippet by four spaces or one tab. Alternatively, you can also use triple backticks () to wrap the code block.

Here’s an example of a Python code block:

def greet(name):
    print("Hello, {}!".format(name))


When you execute this code block, it will output:

Hello, John!

You can also specify the programming language for syntax highlighting by adding the language name after the opening triple backticks. For example:

print("Hello, World!")

You can also display inline code snippets by wrapping them in single backticks (`). For example:

To install a package using pip, use the following command: `pip install package_name`.

Code blocks are an essential feature of Jupyter Notebook Markdown as they allow you to showcase your code and explain it in detail.


Jupyter Notebook Markdown supports the creation of tables using a simple syntax. To create a table, you need to use pipes `|` to separate columns and hyphens `-` to separate the header row from the content rows. Here’s an example:

| Column 1 | Column 2 | Column 3 |
| Row 1, Col 1 | Row 1, Col 2 | Row 1, Col 3 |
| Row 2, Col 1 | Row 2, Col 2 | Row 2, Col 3 |

This will create a table with three columns and two rows. The first row is the header row, and the second and third rows are the content rows.

You can also add formatting to the table by using colons `:`. For example, if you want to align the columns to the left, you can use colons on the left side of the hyphen in the header row:

| Left-aligned | Center-aligned | Right-aligned |
| :----------- | :------------: | ------------: |
| Left         |     Center     |         Right |

This will create a table where the first column is left-aligned, the second column is center-aligned, and the third column is right-aligned.

You can also add emphasis to text within a table by using Markdown syntax such as `*italic*`, `**bold**`, or `***bold and italic***`.

Overall, creating tables in Jupyter Notebook Markdown is easy and allows you to present data in a clear and organized way.


In conclusion, understanding Markdown in Jupyter notebooks is of paramount importance for anyone venturing into the world of data science, coding, or technical communication. Markdown serves as a versatile and efficient tool for creating well-formatted and visually appealing documentation within Jupyter notebooks. By harnessing its power, users can seamlessly blend code, visualizations, and explanatory text to convey their ideas effectively.

Markdown allows users to annotate their code cells, providing crucial context and explanations that make notebooks more accessible and comprehensible to both themselves and others. This is particularly valuable when collaborating on projects, as it enables seamless knowledge sharing and promotes a culture of reproducibility.
Interested in learning more? Check out our Introduction to Python course!

How to Become a Data Scientist PDF

Your FREE Guide to Become a Data Scientist

Discover the path to becoming a data scientist with our comprehensive FREE guide! Unlock your potential in this in-demand field and access valuable resources to kickstart your journey.

Don’t wait, download now and transform your career!

Pierian Training
Pierian Training
Pierian Training is a leading provider of high-quality technology training, with a focus on data science and cloud computing. Pierian Training offers live instructor-led training, self-paced online video courses, and private group and cohort training programs to support enterprises looking to upskill their employees.

You May Also Like

Data Science, Tutorials

Guide to NLTK – Natural Language Toolkit for Python

Introduction Natural Language Processing (NLP) lies at the heart of countless applications we use every day, from voice assistants to spam filters and machine translation. It allows machines to understand, interpret, and generate human language, bridging the gap between humans and computers. Within the vast landscape of NLP tools and techniques, the Natural Language Toolkit […]

Machine Learning, Tutorials

GridSearchCV with Scikit-Learn and Python

Introduction In the world of machine learning, finding the optimal set of hyperparameters for a model can significantly impact its performance and accuracy. However, searching through all possible combinations manually can be an incredibly time-consuming and error-prone process. This is where GridSearchCV, a powerful tool provided by Scikit-Learn library in Python, comes to the rescue. […]

Python Basics, Tutorials

Plotting Time Series in Python: A Complete Guide

Introduction Time series data is a type of data that is collected over time at regular intervals. It can be used to analyze trends, patterns, and behaviors over time. In order to effectively analyze time series data, it is important to visualize it in a way that is easy to understand. This is where plotting […]