How to make a histogram from a list of strings in Python?

前端 未结 8 1213
说谎
说谎 2020-12-03 04:29

I have a list of strings:

a = [\'a\', \'a\', \'a\', \'a\', \'b\', \'b\', \'c\', \'c\', \'c\', \'d\', \'e\', \'e\', \'e\', \'e\', \'e\']

I w

相关标签:
8条回答
  • 2020-12-03 05:14

    this was a while ago so i'm not sure if you still need help but other people might so i'm here. if you're allowed to use matplotlib i think there's a much simpler solution!

    a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
    
    import matplotlib.pyplot as plt
    plt.hist(a) #gives you a histogram of your array 'a'
    plt.show() #finishes out the plot
    

    this should get you a nice histogram! there are also more edits you can do to clean up the graph if you'd like

    0 讨论(0)
  • 2020-12-03 05:23

    As @notconfusing pointed above this can be solved with Pandas and Counter. If for any reason you need to not use Pandas you can get by with only matplotlib using the function in the following code:

    from collections import Counter
    import numpy as np
    import matplotlib.pyplot as plt
    
    a = ['a', 'a', 'a', 'a', 'b', 'b', 'c', 'c', 'c', 'd', 'e', 'e', 'e', 'e', 'e']
    letter_counts = Counter(a)
    
    def plot_bar_from_counter(counter, ax=None):
        """"
        This function creates a bar plot from a counter.
    
        :param counter: This is a counter object, a dictionary with the item as the key
         and the frequency as the value
        :param ax: an axis of matplotlib
        :return: the axis wit the object in it
        """
    
        if ax is None:
            fig = plt.figure()
            ax = fig.add_subplot(111)
    
        frequencies = counter.values()
        names = counter.keys()
    
        x_coordinates = np.arange(len(counter))
        ax.bar(x_coordinates, frequencies, align='center')
    
        ax.xaxis.set_major_locator(plt.FixedLocator(x_coordinates))
        ax.xaxis.set_major_formatter(plt.FixedFormatter(names))
    
        return ax
    
    plot_bar_from_counter(letter_counts)
    plt.show()
    

    Which will produce

    0 讨论(0)
提交回复
热议问题