Bucket the snapshots into six-hour blocks, keep the top five games and lump the rest into “Other,” then sum the viewers in each bucket.
Drawing the Line
ggplot(viewers_over_time,aes(x = six_hour, y = total_viewers, color = category)) +geom_line(linewidth =0.9) +labs(title ="Concurrent viewers by game category",x ="Date (UTC, six-hour buckets)",y ="Total viewers in bucket", color ="Category") + v2v::scale_colour_v2v() + v2v::theme_v2v()
Time on x, summed viewers on y, category to color. theme_v2v() gives every figure in the set one consistent look.
What the Line Chart Shows
“Other” dominates, spiking above 20 million viewers
One reading: viewership really does have a long tail
The other: lumping fifty categories guarantees that bucket wins
The design cost is real
The five named lines press flat against the axis
A dominant series crowds out the rest. Notice that, and say so.
A Bar for Counts
Hour of day is 24 discrete categories, and we want a count per category.
chat_by_hour <- analysis %>%mutate(hour =hour(timestamp)) %>%count(hour, name ="messages")ggplot(chat_by_hour, aes(x = hour, y = messages)) +geom_col(fill ="#2f7d8a") +labs(x ="Hour of day (UTC)", y ="Messages in sample") + v2v::theme_v2v()
geom_col() draws a bar whose height you already computed.
What the Bar Chart Shows
Twitch, November 2018
A clear daily pulse, busiest through UTC midday
Peak at 13:00 with 2,201 messages
Floor at 03:00 with 833, a swing of over two to one
Not mysterious: the audience sat in the Americas and Europe
Twenty-four numbers become a rhythm you read in one glance.