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: [![enter image description here][1]][1] 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() [1]: https://i.sstatic.net/Yt7W9.png Which is terrible in my opinion. Any recommendations for improvements will be much appreciated.