Search code examples
pythonplotlyhistogramplotly-python

Plotly: Continuous Histogram Color


I have created a graph showing me the coordinates of a random walk as histograms. I want to add an attribute to the plot function to see the histograms advancing in continuous color from light blue (first histogram in the list) to dark blue (last histogram in the list). Is there a non-convoluted way to do this?

from plotly.graph_objs import Bar, Layout
from plotly import offline

from random_walk import RandomWalk


# Make a random walk.
rw = RandomWalk(50)
rw.fill_walk()

x_values = rw.x_values
y_values = rw.y_values

# Visualize the results.
data = [Bar(x=x_values, y=y_values)]

x_axis_config = {'title': 'Horizontal Coordinate'}
y_axis_config = {'title': 'Vertical Coordinate'}
my_layout = Layout(title='Results of a 1000 Steps Random Walk',
    xaxis=x_axis_config, yaxis=y_axis_config)
offline.plot({'data': data, 'layout': my_layout}, 
    filename='rw_visual_plotly.html')

class to create the steps:

from random import choice

class RandomWalk:
    """A class to generate random walks."""

    def __init__(self, num_points=5000):
        """Initialize attributes of a walk."""
        self.num_points = num_points

        # All walks start at (0, 0).
        self.x_values = [0]
        self.y_values = [0]

    def fill_walk(self):
        """Calculate all the points in the walk."""

        # Keep taking steps until the walk reaches the desired length.
        while len(self.x_values) < self.num_points:

            # Decide which direction to go and how far to go in that direction.
            x_direction = choice([-1, 1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction * x_distance

            y_direction = choice([-1, 1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance

            # Reject moves that go nowhere.
            if x_step == 0 and y_step == 0:
                continue

            # Calculate the new position.
            x = self.x_values[-1] + x_step
            y = self.y_values[-1] + y_step

            self.x_values.append(x)
            self.y_values.append(y)    

Solution

  • See this post in the Plotly Community Forum.

    from plotly.graph_objs import Bar, Layout
    from plotly import offline
    
    # Make a random walk.
    rw = RandomWalk(50)
    rw.fill_walk()
    
    x_values = rw.x_values
    y_values = rw.y_values
    
    # Visualize the results.
    data = [Bar(x=x_values, y=y_values, marker={'color': x_values, 'colorscale': 'Blues'})]
    
    x_axis_config = {'title': 'Horizontal Coordinate', 'linecolor': 'gray', 'mirror': True}
    y_axis_config = {'title': 'Vertical Coordinate', 'linecolor': 'gray', 'mirror': True}
    
    my_layout = Layout(title='Results of a 1000 Steps Random Walk', plot_bgcolor='white',
                       xaxis=x_axis_config, yaxis=y_axis_config)
    
    offline.plot({'data': data, 'layout': my_layout}, filename='rw_visual_plotly.html')
    

    enter image description here