Last time, I did not show our custom emojis, since they are, of course, not available in the fonts I used. This time, I will incorporate them with
geom_image(). It is part of the
ggimage package from Guangchuang Yu, which you can find here on his Github. With
geom_image() you can include images like
.png files to your
What changed since last year?
Let’s first have a look at the amount of emojis we are using. In the plot below, you can see that since my last analysis in October 2018 (red line) the amount of emojis is rising. Not as much as I thought it would, but compared to the previous period, we now have more days with a usage of over 100 emojis per day!
Like last time, our top emoji is ????, followed by ???? and ????. But sneaking in at number ten is one of our custom emojis: party_hat_parrot!
How to include custom images?
In my previous blogpost, I hid all our custom emojis behind❓since they were not part of the font. It did not occur to me to use their images, even though the package is from the same creator! So, to make up for my ignorance, I grabbed the top 30 custom emojis and downloaded their images from our Slack servers, saved them as
.png and made sure they are all roughly the same size.
geom_image() I just added the path of the images to my data (the
… are just an abbreviation for the complete path).
NAME COUNT REACTION IMAGE 1: alnatura 25 63 .../custom/alnatura.png 2: blog 19 20 .../custom/blog.png 3: dataiku 15 22 .../custom/dataiku.png 4: dealwithit_parrot 3 100 .../custom/dealwithit_parrot.png 5: deananddavid 31 18 .../custom/deananddavid.png
This would have been enough to just add the images now, but since I wanted the
NAME attribute as a label, I included
geom_text_repel from the
ggrepel library. This makes handling of non-overlapping labels much simpler!
ggplot(custom_dt, aes( x = REACTION, y = COUNT, label = NAME)) + geom_image(aes(image = IMAGE), size = 0.04) + geom_text_repel(point.padding = 0.9, segment.alpha = 0) + xlab("as reaction") + ylab("within message") + theme_minimal()
Usually, if a label is “too far” away from the marker,
geom_text_repel includes a line to indicate where the labels belong. Since these lines would overlap the images, I used
segment.alpha = 0 to make them invisible. With
point.padding = 0.9 I gave the labels a bit more space, so it looks nicer. Depending on the size of the plot, this needs to be adjusted. In the plot, one can see our usage of emojis within a message (y-axis) and as a reaction (x-axis).
To combine the emoji font and custom emojis, I used the following data and code — really… why did I not do this last time? ???? Since the
NA when I want to use the
IMAGE, there is no “double plotting”.
EMOJI REACTION COUNT SUM PLACE UNICODE IMAGE 1: :+1: 1090 0 1090 1 U0001f44d 2: :joy: 609 152 761 2 U0001f602 3: :smile: 91 496 587 3 U0001f604 4: :-1: 434 9 443 4 U0001f44e 5: :tada: 346 38 384 5 U0001f389 6: :fire: 274 17 291 6 U0001f525 7: :slightly_smiling_face: 1 250 251 7 U0001f642 8: :wink: 27 191 218 8 U0001f609 9: :clap: 201 13 214 9 U0001f44f 10: :party_hat_parrot: 192 9 201 10 <NA> .../custom/party_hat_parrot.png
quartz() ggplot(plotdata2, aes(x = PLACE, y = SUM, label = UNICODE)) + geom_bar(stat = "identity", fill = "steelblue") + geom_text(family="EmojiOne") + xlab("Most popular emojis") + ylab("Number of usage") + scale_fill_brewer(palette = "Paired") + geom_image(aes(image = IMAGE), size = 0.04) + theme_minimal() ps = grid.export(paste0(main_path, "plots/top-10-used-emojis.svg"), addClass=T) dev.off()
The meaning behind emojis
Now we know what our top emojis are. But what is the rest of the world doing? Thanks to Emojimore for providing me with this overview! On their site, you can find meanings for a lot more emojis.
Behind each of our custom emojis is a story as well. For example, all the food emojis are helping us every day to decide where to eat and provide information on what everyone is planning for lunch! And if you do not agree with the decision, just react with sadphan to let the others know about your feelings. If you want to know the whole stories behind all custom emojis or even help create new ones, then maybe you should join our team — check out our available job offers here!