5
\$\begingroup\$

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

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.

\$\endgroup\$
2
  • \$\begingroup\$ Just to be clear… the scores are irrelevant? And it's OK to present each user's emojis in any order? \$\endgroup\$ – 200_success Nov 18 '17 at 18:44
  • \$\begingroup\$ Well I rather put the highest score first, closest to the person's name, but right now it doesn't really bother me. \$\endgroup\$ – sheldonzy Nov 18 '17 at 18:45
1
\$\begingroup\$

Your code might be a bit clearer without level & start, preferring to manipulate just x & 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.

\$\endgroup\$

Your Answer

By clicking β€œPost Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.