Plotting text from a dictionary with Matplotlib I have the following dictionary:

top = {'aaaa': {'☹': 7, '': 12, '': 6},
      'bbbb': {'': 2, '': 2, '': 2},
      'cccc': {'☹': 5, '': 3, '': 3},
      'dddd': {'': 8, '': 7, '': 3},
      'eeee': {'☺': 3, '': 5, '': 4},
      'ffff': {'☹': 5, '': 5, '': 5}}


Each 'aaaa' or 'bbbb' is the user's name, and his values is the emoji he is using the most.
I want to plot a decent looking graph to visualize.
After a few tries, this is my best work:



with the code:

import matplotlib.pyplot as plt

def top_emoji(top):
    fig, ax = plt.subplots(figsize=(8, 5))
    y = 9
    level = 0
    start = 9
    for name, dictionary in top.items():
        ax.text(start, y - level, name, fontsize=20)
        x = 3
        for emoj in dictionary.keys():
            ax.text(start - x, y - level, emoj, fontname='Segoe UI Emoji', fontsize=20)
            x += 1
        level += 1

    ax.axis([0, 10, 0, 10])
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
    ax.axis('off')
    plt.show()


Which is terrible in my opinion. Any recommendations for improvements will be much appreciated.
Your code might be a bit clearer without level &amp; start, preferring to manipulate just x &amp; y.

You might write a sorting helper function, and change the emoj loop to this:

    for x, emoj in enumerate(emoj_by_score(dictionary)):


You have some hard coded values that you could derive by inspecting the top input argument. On the whole, it doesn't seem so terrible. It is reasonably clear.