Skip to main content
Global

jupyterteam@ucdavis.edu

  • Page ID
    104348
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Query \(\PageIndex{1}\)

    Press "Run" in the first cell to get started, then either press"Run" in each subsequent cell, or press "Restart & Run All" to execute all the cells in order.

    read only:

    print('Hello world!')
    Hello world!
    

    not read only:

    print('hello world')
            hello world
          

    Matplotlib

    %matplotlib widget
    
    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    # Fixing random state for reproducibility
    np.random.seed(19680801)
    
    
    def gen_rand_line(length, dims=2):
        """
        Create a line using a random walk algorithm.
    
        Parameters
        ----------
        length : int
            The number of points of the line.
        dims : int
            The number of dimensions of the line.
        """
        line_data = np.empty((dims, length))
        line_data[:, 0] = np.random.rand(dims)
        for index in range(1, length):
            # scaling the random numbers by 0.1 so
            # movement is small compared to position.
            # subtraction by 0.5 is to change the range to [-0.5, 0.5]
            # to allow a line to move backwards.
            step = (np.random.rand(dims) - 0.5) * 0.1
            line_data[:, index] = line_data[:, index - 1] + step
        return line_data
    
    
    def update_lines(num, data_lines, lines):
        for line, data in zip(lines, data_lines):
            # NOTE: there is no .set_data() for 3 dim data...
            line.set_data(data[0:2, :num])
            line.set_3d_properties(data[2, :num])
        return lines
    
    
    # Attaching 3D axis to the figure
    fig = plt.figure()
    ax = fig.add_subplot(projection="3d")
    
    # Fifty lines of random 3-D lines
    data = [gen_rand_line(25, 3) for index in range(50)]
    
    # Creating fifty line objects.
    # NOTE: Can't pass empty arrays into 3d version of plot()
    lines = [ax.plot(dat[0, 0:1], dat[1, 0:1], dat[2, 0:1])[0] for dat in data]
    
    # Setting the axes properties
    ax.set_xlim3d([0.0, 1.0])
    ax.set_xlabel('X')
    
    ax.set_ylim3d([0.0, 1.0])
    ax.set_ylabel('Y')
    
    ax.set_zlim3d([0.0, 1.0])
    ax.set_zlabel('Z')
    
    ax.set_title('3D Test')
    
    # Creating the Animation object
    line_ani = animation.FuncAnimation(
        fig, update_lines, 50, fargs=(data, lines), interval=50)
    
    plt.show()

    Bqplot

    import numpy as np
    from bqplot import pyplot as plt
    
    size = 100
    np.random.seed(0)
    x_data = np.arange(size)
    y_data = np.cumsum(np.random.randn(size)  * 100.0)
    
    plt.figure(title='My First Plot')
    plt.plot(x_data, y_data)
    plt.show()

    Plotly

    import plotly.express as px
    df = px.data.tips()
    fig = px.histogram(df, x="total_bill", y="tip", color="sex", marginal="rug",
                       hover_data=df.columns)
    fig.show()

    Ipyvolume

    !pip install ipyvolume
    import numpy as np
    import ipyvolume as ipv
    V = np.zeros((128,128,128)) # our 3d array
    # outer box
    V[30:-30,30:-30,30:-30] = 0.75
    V[35:-35,35:-35,35:-35] = 0.0
    # inner box
    V[50:-50,50:-50,50:-50] = 0.25
    V[55:-55,55:-55,55:-55] = 0.0
    ipv.quickvolshow(V, level=[0.25, 0.75], opacity=0.03, level_width=0.1, data_min=0, data_max=1)

    nglview

    import nglview as nv
    
    view = nv.show_structure_file(nv.datafiles.PDB)
    view

    Ipytcytoscape

    import ipycytoscape
    data = {
      'nodes': [
          { 'data': { 'id': 'desktop', 'name': 'Cytoscape', 'href': 'http://cytoscape.org' } },
          { 'data': { 'id': 'a', 'name': 'Grid', 'href': 'http://cytoscape.org' } },
          { 'data': { 'id': 'b', 'name': 'Cola', 'href': 'http://cytoscape.org' } },
          { 'data': { 'id': 'c', 'name': 'Popper', 'href': 'http://cytoscape.org' } },
          { 'data': { 'id': 'js', 'name': 'Cytoscape.js', 'href': 'http://js.cytoscape.org' } }
      ],
      'edges': [
          {'data': { 'source': 'desktop', 'target': 'js' }},
          {'data': { 'source': 'a', 'target': 'b' }},
          {'data': { 'source': 'a', 'target': 'c' }},
          {'data': { 'source': 'b', 'target': 'c' }},
          {'data': { 'source': 'js', 'target': 'b' }}
      ]
    }
    cytoscapeobj = ipycytoscape.CytoscapeWidget()
    cytoscapeobj.graph.add_graph_from_json(data)
    cytoscapeobj.set_style([{
      'selector': 'node',
      'css': {
          'content': 'data(name)',
          'text-valign': 'center',
          'color': 'white',
          'text-outline-width': 2,
          'text-outline-color': 'green',
          'background-color': 'green'
      }
      },
      {
      'selector': ':selected',
      'css': {
          'background-color': 'black',
          'line-color': 'black',
          'target-arrow-color': 'black',
          'source-arrow-color': 'black',
          'text-outline-color': 'black'
      }}
      ])
    cytoscapeobj

    Pythreejs

    from pythreejs import *
    from IPython.display import display
    import ipywidgets
    # Reduce repo churn for examples with embedded state:
    from pythreejs._example_helper import use_example_model_ids
    use_example_model_ids()
    
    ball = Mesh(geometry=SphereGeometry(),
                material=MeshLambertMaterial(color='red'))
    key_light = DirectionalLight(color='white', position=[3, 5, 1], intensity=0.5)
    
    c = PerspectiveCamera(position=[0, 5, 5], up=[0, 1, 0], children=[key_light])
    
    scene = Scene(children=[ball, c, AmbientLight(color='#777777')], background=None)
    
    renderer = Renderer(camera=c,
                        scene=scene,
                        alpha=True,
                        clearOpacity=0,
                        controls=[OrbitControls(controlling=c)])
    display(renderer)
    from pythreejs import *
    import ipywidgets
    from IPython.display import display
    # Reduce repo churn for examples with embedded state:
    from pythreejs._example_helper import use_example_model_ids
    use_example_model_ids()
    view_width = 600
    view_height = 400
    
    
    sphere = Mesh(
        SphereBufferGeometry(1, 32, 16),
        MeshStandardMaterial(color='red')
    )
    
    cube = Mesh(
        BoxBufferGeometry(1, 1, 1),
        MeshPhysicalMaterial(color='green'),
        position=[2, 0, 4]
    )
    
    camera = PerspectiveCamera( position=[10, 6, 10], aspect=view_width/view_height)
    key_light = DirectionalLight(position=[0, 10, 10])
    ambient_light = AmbientLight()
    
    positon_track = VectorKeyframeTrack(name='.position',
        times=[0, 2, 5],
        values=[10, 6, 10,
                6.3, 3.78, 6.3,
                -2.98, 0.84, 9.2,
               ])
    rotation_track = QuaternionKeyframeTrack(name='.quaternion',
        times=[0, 2, 5],
        values=[-0.184, 0.375, 0.0762, 0.905,
                -0.184, 0.375, 0.0762, 0.905,
                -0.0430, -0.156, -0.00681, 0.987,
               ])
    
    camera_clip = AnimationClip(tracks=[positon_track, rotation_track])
    camera_action = AnimationAction(AnimationMixer(camera), camera_clip, camera)
    
    scene = Scene(children=[sphere, cube, camera, key_light, ambient_light])
    controller = OrbitControls(controlling=camera)
    renderer = Renderer(camera=camera, scene=scene, controls=[controller],
                        width=view_width, height=view_height)
    
    renderer

     

    camera_action

     

    from pythreejs import *
    from IPython.display import display
          
    # Materials
    mat = MeshStandardMaterial(color='#ff0000')
    mat_green = MeshStandardMaterial(color='#00ff00')
    mat_blue = MeshStandardMaterial(color='#0000ff')
          
    # Geometries
    torus = TorusGeometry(radius=12, tube=3, radialSegments=16, tubularSegments=100)
    sphere = SphereGeometry(radius=12, _flat=True)
          
    bufferSphere = SphereBufferGeometry(radius=12, _flat=True)
    bufferTorus = TorusBufferGeometry(radius=12, tube=3, radialSegments=16, tubularSegments=100)
          
    sphere
    bufferSphere

    Ipyleaflet

    from ipyleaflet import Map, TileLayer, basemaps
    from ipyleaflet.velocity import Velocity
    import xarray as xr
    import os
    
    if not os.path.exists('wind-global.nc'):
      url = 'https://github.com/benbovy/xvelmap/raw/master/notebooks/wind-global.nc'
      import requests
      r = requests.get(url)
      wind_data = r.content
      with open('wind-global.nc', 'wb') as f:
          f.write(wind_data)
    
    center = [0, 0]
    zoom = 1
    m = Map(center=center, zoom=zoom, interpolation='nearest', basemap=basemaps.CartoDB.DarkMatter)
    
    ds = xr.open_dataset('wind-global.nc')
    display_options = {
        'velocityType': 'Global Wind',
        'displayPosition': 'bottomleft',
        'displayEmptyString': 'No wind data'
    }
    wind = Velocity(data=ds,
                    zonal_speed='u_wind',
                    meridional_speed='v_wind',
                    latitude_dimension='lat',
                    longitude_dimension='lon',
                    velocity_scale=0.01,
                    max_velocity=20,
                    display_options=display_options)
    m.add_layer(wind)
    
    m

    Pandas

    import pandas as pd
    iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
    iris

    bqplot

    #You can scroll this code!
    import pandas as pd
    import numpy as np
    import os
    
    from bqplot import (
        LogScale, LinearScale, OrdinalColorScale, ColorAxis,
        Axis, Scatter, Lines, CATEGORY10, Label, Figure, Tooltip
    )
    
    from ipywidgets import HBox, VBox, IntSlider, Play, jslink
    initial_year = 1800
    data = pd.read_json('https://raw.githubusercontent.com/bqplot/bqplot/958b0679cbccbc1411688cc6f8a5a22642377c68/examples/Applications/Wealth%20Of%20Nations/nations.json')
    def clean_data(data):
        for column in ['income', 'lifeExpectancy', 'population']:
            data = data.drop(data[data[column].apply(len) <= 4].index)
        return data
    
    def extrap_interp(data):
        data = np.array(data)
        x_range = np.arange(1800, 2009, 1.)
        y_range = np.interp(x_range, data[:, 0], data[:, 1])
        return y_range
    
    def extrap_data(data):
        for column in ['income', 'lifeExpectancy', 'population']:
            data[column] = data[column].apply(extrap_interp)
        return data
    data = clean_data(data)
    data = extrap_data(data)
    income_min, income_max = np.min(data['income'].apply(np.min)), np.max(data['income'].apply(np.max))
    life_exp_min, life_exp_max = np.min(data['lifeExpectancy'].apply(np.min)), np.max(data['lifeExpectancy'].apply(np.max))
    pop_min, pop_max = np.min(data['population'].apply(np.min)), np.max(data['population'].apply(np.max))
    def get_data(year):
        year_index = year - 1800
        income = data['income'].apply(lambda x: x[year_index])
        life_exp = data['lifeExpectancy'].apply(lambda x: x[year_index])
        pop =  data['population'].apply(lambda x: x[year_index])
        return income, life_exp, pop
    tt = Tooltip(fields=['name', 'x', 'y'], labels=['Country Name', 'Income per Capita', 'Life Expectancy'])
    year_label = Label(x=[0.75], y=[0.10], default_size=46, font_weight='bolder', colors=['orange'],
                       text=[str(initial_year)], enable_move=True)
    x_sc = LogScale(min=income_min, max=income_max)
    y_sc = LinearScale(min=life_exp_min, max=life_exp_max)
    c_sc = OrdinalColorScale(domain=data['region'].unique().tolist(), colors=CATEGORY10[:6])
    size_sc = LinearScale(min=pop_min, max=pop_max)
    ax_y = Axis(label='Life Expectancy', scale=y_sc, orientation='vertical', side='left', grid_lines='solid')
    ax_x = Axis(label='Income per Capita', scale=x_sc, grid_lines='solid')
    # Start with the first year's data
    cap_income, life_exp, pop = get_data(initial_year)
    wealth_scat = Scatter(x=cap_income, y=life_exp, color=data['region'], size=pop,
                          names=data['name'], display_names=False,
                          scales={'x': x_sc, 'y': y_sc, 'color': c_sc, 'size': size_sc},
                          default_size=4112, tooltip=tt, animate=True, stroke='Black',
                          unhovered_style={'opacity': 0.5})
    nation_line = Lines(x=data['income'][0], y=data['lifeExpectancy'][0], colors=['Gray'],
                           scales={'x': x_sc, 'y': y_sc}, visible=False)
    time_interval = 10
    fig = Figure(marks=[wealth_scat, year_label, nation_line], axes=[ax_x, ax_y],
                 title='Health and Wealth of Nations', animation_duration=time_interval)
    year_slider = IntSlider(min=1800, max=2008, step=1, description='Year', value=initial_year)
    def hover_changed(change):
        if change.new is not None:
            nation_line.x = data[data['name'] == wealth_scat.names[change.new]]['income'].values[0]
            nation_line.y = data[data['name'] == wealth_scat.names[change.new]]['lifeExpectancy'].values[0]
            nation_line.visible = True
        else:
            nation_line.visible = False
            
    wealth_scat.observe(hover_changed, 'hovered_point')
    def year_changed(change):
        wealth_scat.x, wealth_scat.y, wealth_scat.size = get_data(year_slider.value)
        year_label.text = [str(year_slider.value)]
    
    year_slider.observe(year_changed, 'value')
    play_button = Play(min=1800, max=2008, interval=time_interval)
    jslink((play_button, 'value'), (year_slider, 'value'))
    VBox([HBox([play_button, year_slider]), fig])

    Bokeh

    import numpy as np
    from scipy.integrate import odeint
    
    from bokeh.plotting import figure, output_file, show
    
    sigma = 10
    rho = 28
    beta = 8.0/3
    theta = 3 * np.pi / 4
    
    def lorenz(xyz, t):
        x, y, z = xyz
        x_dot = sigma * (y - x)
        y_dot = x * rho - x * z - y
        z_dot = x * y - beta* z
        return [x_dot, y_dot, z_dot]
    
    initial = (-10, -7, 35)
    t = np.arange(0, 100, 0.006)
    
    solution = odeint(lorenz, initial, t)
    
    x = solution[:, 0]
    y = solution[:, 1]
    z = solution[:, 2]
    xprime = np.cos(theta) * x - np.sin(theta) * y
    
    colors = ["#C6DBEF", "#9ECAE1", "#6BAED6", "#4292C6", "#2171B5", "#08519C", "#08306B",]
    
    p = figure(title="Lorenz attractor example", background_fill_color="#fafafa")
    
    p.multi_line(np.array_split(xprime, 7), np.array_split(z, 7),
                 line_color=colors, line_alpha=0.8, line_width=1.5)
    
    output_file("lorenz.html", title="lorenz.py example")
    
    show(p)

    Matplotlib + Interact()

    %matplotlib widget
    import ipywidgets as widgets
    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.linspace(0,10)
    
    def sine_func(x, w, amp):
        return amp*np.sin(w*x)
    
    @widgets.interact(w=(0, 4, 0.25), amp=(0, 4, .1))
    def update(w = 1, amp = 1):
        plt.clf()
        plt.ylim(-4, 4)
        plt.plot(x, sine_func(x, w, amp))