Is it possible to print using different colors in ipython's Notebook?
Question:
Is it somehow possible to have certain output appear in a different color in the IPython Notebook?
For example, something along the lines of:
print("Hello Red World", color='red')
Answers:
Not with raw Python print. You will have to define a _repr_html_
on an object and return it or call IPython.lib.display(object_with_repr_html)
.
I guess you could overwrite the built-in print to do it automatically…
You could inspire from http://nbviewer.ipython.org/5098827, code in a gist on github, ML discussion here.
The notebook has, of course, its own syntax highlighting. So I would be careful when using colour elsewhere, just to avoid making things harder to read for yourself or someone else (e.g., output should simply be in black, but you get parts in red if there is an exception).
But (to my surprise), it appears that you can use ANSI escape codes (even in the browser). At least, I could:
On the default Python prompt:
>>> print("x1b[31m"red"x1b[0m")
"red"
In the notebook:
In [28]: print("x1b[31m"red"x1b[0m")
"red"
(Obviously, I cheated here with the syntax highlighting of SO so that “red” is printed in the colour red in both examples. I don’t think SO allows a user to set a colour for text.)
I wouldn’t really know another way to get colours.
For more on ANSI escape codes, I’d suggest the Wikipedia article. And if you find the above to verbose, you can of course write a wrapper function around this.
Here’s a quick hack:
from IPython.display import HTML as html_print
def cstr(s, color='black'):
return "<text style=color:{}>{}</text>".format(color, s)
left, word, right = 'foo' , 'abc' , 'bar'
html_print(cstr(' '.join([left, cstr(word, color='red'), right]), color='black') )
[out]:
If you just want a single color: html_print(cstr('abc', 'red'))
You can use this library termcolor and you can get all other official libraries of python in PyPi.
pip install termcolor
- then goto
ipython
Code
from termcolor import colored
print(colored('hello', 'red'), colored('world', 'green'))
print(colored("hello red world", 'red'))
Output:
hello world
hello red world
The first argument is what you want to print on console and second argument use that color.
See the documentation in pypi.python.org
for more information
Using @Evert answer, here is a method that would wrap a list of tokens in red and return a highlighted string
def color_in_tokens(tokens, color_token_contains="_"):
"""
Highlights the tokens which contain 'color_token_contains'
:param tokens: list of strings
:param color_token_contains: str (the string for marking a token red)
:return: str
"""
return " ".join(["x1b[31m%sx1b[0m" % i if color_token_contains in i else i for i in tokens])
Similar to what @alvas mentioned but simpler
from IPython.display import Markdown
display (Markdown('this is in <span style="color: #ff0000">red</span> color.'))
There is the colored library (pip install colored
), which you can use to modify a string to get color codes to modify how it is printed. Example use:
import colored
print(colored.bg("white") + colored.fg("red") + "Hello world!")
colorama
makes it dead easy:
from colorama import Fore
print(Fore.RED + "this is red")
Thanks to @alvas function and adding another function we get a very simple way to print
from IPython.display import HTML as html_print
from IPython.display import display
def cstr(s, color='black'):
return "<text style=color:{}>{}</text>".format(color, s)
def print_color(t):
display(html_print(' '.join([cstr(ti, color=ci) for ti,ci in t])))
print_color((('hello my name is', 'black'),('jhjfd','red')))
print_color((('hello my name is', 'green'),))
Text in red:
print("x1b[31mText in red")
Text in bold:
print("x1B[1mText in bold")
Text in underline
print("x1B[4mText in underline")
See here under Styles and Colors chapter and see what works for you. RGB colors didn’t work for me.
Taken from: Standard for ANSI Colors in Terminals
This snippet can show you all the colors in one row:
RESET = "x1b[0m"
print("To reset attributes: \x1b[0mn")
for i in range(0, 8):
print("x1b[1;3{0}m\x1b[1;3{0}m{1} x1b[0;3{0}m\x1b[0;3{0}m{1} "
"x1b[1;4{0};3{0}m\x1b[1;3{0};4{0}m{1}".format(i, RESET))
In the Jupiter notebook, we can use a color marker to print the output in different colors
There are three ways that we can use a color marker.
let’s see how to print a yellow color in a notebook.
print(' 33[93m output')
print(' 33[93m' 'output')
print(' 33[93m' + 'output')
Some of the colors are :
- yellow = ‘
Is it somehow possible to have certain output appear in a different color in the IPython Notebook?
For example, something along the lines of:
print("Hello Red World", color='red')
Not with raw Python print. You will have to define a _repr_html_
on an object and return it or call IPython.lib.display(object_with_repr_html)
.
I guess you could overwrite the built-in print to do it automatically…
You could inspire from http://nbviewer.ipython.org/5098827, code in a gist on github, ML discussion here.
The notebook has, of course, its own syntax highlighting. So I would be careful when using colour elsewhere, just to avoid making things harder to read for yourself or someone else (e.g., output should simply be in black, but you get parts in red if there is an exception).
But (to my surprise), it appears that you can use ANSI escape codes (even in the browser). At least, I could:
On the default Python prompt:
>>> print("x1b[31m"red"x1b[0m")
"red"
In the notebook:
In [28]: print("x1b[31m"red"x1b[0m")
"red"
(Obviously, I cheated here with the syntax highlighting of SO so that “red” is printed in the colour red in both examples. I don’t think SO allows a user to set a colour for text.)
I wouldn’t really know another way to get colours.
For more on ANSI escape codes, I’d suggest the Wikipedia article. And if you find the above to verbose, you can of course write a wrapper function around this.
Here’s a quick hack:
from IPython.display import HTML as html_print
def cstr(s, color='black'):
return "<text style=color:{}>{}</text>".format(color, s)
left, word, right = 'foo' , 'abc' , 'bar'
html_print(cstr(' '.join([left, cstr(word, color='red'), right]), color='black') )
[out]:
If you just want a single color: html_print(cstr('abc', 'red'))
You can use this library termcolor and you can get all other official libraries of python in PyPi.
pip install termcolor
- then goto
ipython
Code
from termcolor import colored
print(colored('hello', 'red'), colored('world', 'green'))
print(colored("hello red world", 'red'))
Output:
hello world
hello red world
The first argument is what you want to print on console and second argument use that color.
See the documentation in pypi.python.org
for more information
Using @Evert answer, here is a method that would wrap a list of tokens in red and return a highlighted string
def color_in_tokens(tokens, color_token_contains="_"):
"""
Highlights the tokens which contain 'color_token_contains'
:param tokens: list of strings
:param color_token_contains: str (the string for marking a token red)
:return: str
"""
return " ".join(["x1b[31m%sx1b[0m" % i if color_token_contains in i else i for i in tokens])
Similar to what @alvas mentioned but simpler
from IPython.display import Markdown
display (Markdown('this is in <span style="color: #ff0000">red</span> color.'))
There is the colored library (pip install colored
), which you can use to modify a string to get color codes to modify how it is printed. Example use:
import colored
print(colored.bg("white") + colored.fg("red") + "Hello world!")
colorama
makes it dead easy:
from colorama import Fore
print(Fore.RED + "this is red")
Thanks to @alvas function and adding another function we get a very simple way to print
from IPython.display import HTML as html_print
from IPython.display import display
def cstr(s, color='black'):
return "<text style=color:{}>{}</text>".format(color, s)
def print_color(t):
display(html_print(' '.join([cstr(ti, color=ci) for ti,ci in t])))
print_color((('hello my name is', 'black'),('jhjfd','red')))
print_color((('hello my name is', 'green'),))
Text in red:
print("x1b[31mText in red")
Text in bold:
print("x1B[1mText in bold")
Text in underline
print("x1B[4mText in underline")
See here under Styles and Colors chapter and see what works for you. RGB colors didn’t work for me.
Taken from: Standard for ANSI Colors in Terminals
This snippet can show you all the colors in one row:
RESET = "x1b[0m"
print("To reset attributes: \x1b[0mn")
for i in range(0, 8):
print("x1b[1;3{0}m\x1b[1;3{0}m{1} x1b[0;3{0}m\x1b[0;3{0}m{1} "
"x1b[1;4{0};3{0}m\x1b[1;3{0};4{0}m{1}".format(i, RESET))
In the Jupiter notebook, we can use a color marker to print the output in different colors
There are three ways that we can use a color marker.
let’s see how to print a yellow color in a notebook.
print(' 33[93m output')
print(' 33[93m' 'output')
print(' 33[93m' + 'output')
Some of the colors are :
- yellow = ‘