Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Read by thought-leaders and decision-makers around the world. Phone Number: +1-650-246-9381 Email: [email protected]
228 Park Avenue South New York, NY 10003 United States
Website: Publisher: https://towardsai.net/#publisher Diversity Policy: https://towardsai.net/about Ethics Policy: https://towardsai.net/about Masthead: https://towardsai.net/about
Name: Towards AI Legal Name: Towards AI, Inc. Description: Towards AI is the world's leading artificial intelligence (AI) and technology publication. Founders: Roberto Iriondo, , Job Title: Co-founder and Advisor Works for: Towards AI, Inc. Follow Roberto: X, LinkedIn, GitHub, Google Scholar, Towards AI Profile, Medium, ML@CMU, FreeCodeCamp, Crunchbase, Bloomberg, Roberto Iriondo, Generative AI Lab, Generative AI Lab Denis Piffaretti, Job Title: Co-founder Works for: Towards AI, Inc. Louie Peters, Job Title: Co-founder Works for: Towards AI, Inc. Louis-François Bouchard, Job Title: Co-founder Works for: Towards AI, Inc. Cover:
Towards AI Cover
Logo:
Towards AI Logo
Areas Served: Worldwide Alternate Name: Towards AI, Inc. Alternate Name: Towards AI Co. Alternate Name: towards ai Alternate Name: towardsai Alternate Name: towards.ai Alternate Name: tai Alternate Name: toward ai Alternate Name: toward.ai Alternate Name: Towards AI, Inc. Alternate Name: towardsai.net Alternate Name: pub.towardsai.net
5 stars – based on 497 reviews

Frequently Used, Contextual References

TODO: Remember to copy unique IDs whenever it needs used. i.e., URL: 304b2e42315e

Resources

Unlock the full potential of AI with Building LLMs for Productionβ€”our 470+ page guide to mastering LLMs with practical projects and expert insights!

Publication

Tips and tricks for Plotly Bar Chart
Latest

Tips and tricks for Plotly Bar Chart

Last Updated on August 6, 2021 by Editorial Team

Author(s): Kashish Rastogi

Data Visualization

Step-by-step guide for Bar Chart and making mind-blowing visualization. Tips and tricks to make your workΒ easy.

Image by: https://www.linkedin.com/in/kashish-rastogi-3a8b4119a
Image by: https://www.linkedin.com/in/kashish-rastogi-3a8b4119a

You never knew you needed Plotly! Plotly is like chocolate for visualization you can’t get enough of it. The best library has the best user interaction charts.

Here I am going to talk about different types of Bar charts in Plotly. Data is taken from Kaggle and the whole notebook is available here.

The idea behind making aΒ chart.

How you display data has more power than any charts you use, but the right chart also matters aΒ lot.

Let’s getΒ started!

Data

The idea to make a chart was to display which program; TV Shows or Movies has the highest rating onΒ Netflix.

Data for makingΒ chart

First Plot

Plotted a stacked bar chart for comparison between TV Shows and Movies. This chart tells us that Netflix’s audience prefers to watch movies rather than TV Shows. The Highest rating is given to Movies and TV Show having TV-MA tag which tell us that most of the content on Netflix is for the mature audience and not for age 17 years andΒ under.

Code:

fig = px.histogram(df, y='rating', color='type')
Stacked Bar chartβ€Šβ€”β€ŠPlotly

I am quite satisfied with the Stacked bar chart but it is not easy to look for TV shows in the chart. Sometimes the amount of TV Shows is so little that even if the TV Show value is present in the chart at my first glance of the chart I am not being able to seeΒ it.

Don’t worry we have another optionΒ too.

Group BarΒ chart

code:

fig = px.histogram(df, y='rating', color='type', barmode='group')
Group Bar chartβ€Šβ€”β€ŠPlotly

Now I can clearly see and compare the TV Shows and Movies for Ratings. It looks quite elegant now but in TV Show β€˜R’ rating have a very small value and, β€˜PG-13’, β€˜PG’, etc do not have any value. The audience might don’t see this information as its value is very less. Do you think any other chart is more suitable than this? Let’s findΒ out.

Bidirectional BarΒ chart

Bidirectional Bar Chartβ€Šβ€”β€ŠPlotly

This is the best chart till now it is easy to compare both TV Show and Movies vsΒ Rating.

Code:

# making a copy of df
dff = df.copy()
#1. making a df one for tv show with rating
df_tv_show = dff[dff['type']=='TV Show'][['rating', 'type']].rename(columns={'type':'tv_show'})
# making a df for movie with rating
df_movie = dff[dff['type']=='Movie'][['rating', 'type']].rename(columns={'type':'movie'})

Making a data frame for each TV Show and Movie withΒ Ratings.

Selecting the data which has Type= TV Show with a rating and renaming the column to β€˜tv_show’. The df_tv_show look likeΒ this

Data Frame of df_tv_show

Selecting the data which has Type= Movie with a rating and renaming the column to β€˜movie’. The df_movie look likeΒ this

Data Frame ofΒ df_movie

Now let’s find out the value counts of rating in df_tv_show and df_movie.

# 2.
df_tv_show = df_tv_show.rating.value_counts()
df_tv_show = pd.DataFrame(df_tv_show).reset_index().rename(columns={'index':'tv_show'})
df_tv_show['rating_final'] = df_tv_show['rating']
# making rating column value negative
df_tv_show['rating'] *= -1
df_movie = df_movie.rating.value_counts()
df_movie = pd.DataFrame(df_movie).reset_index().rename(columns={'index':'movie'})

After finding out the value count of the rating rename the columns to tv_show. We want to build a Bidirectional Bar chart so one of the β€˜type’ has to set the values of rating on the negative x-axis. Let’s make a new column rating_final where multiply (-1) with the original values ofΒ rating.

The data look like this for df_tv_show.

After finding out the value count of the rating rename the columns to the movie. The data look like this for df_movie.

All the preprocessing isΒ done.

Let’s make the Bidirectional BarΒ Chart

Code:

fig = make_subplots(rows=1, cols=2, specs=[[{}, {}]], shared_yaxes=True, horizontal_spacing=0)
# bar plot for tv shows
fig.append_trace(go.Bar(x=df_tv_show.rating, y=df_tv_show.tv_show,
orientation='h', showlegend=True,
text=df_tv_show.rating_final,
name='TV Show',
marker_color='#221f1f'), 1, 1)
# bar plot for movies
fig.append_trace(go.Bar(x=df_movie.rating, y=df_movie.movie,
orientation='h', showlegend=True,
text=df_movie.rating,
name='Movie', marker_color='#b20710'), 1, 2)

Making 2 subplots of bar chart one bar chart having df_tv_show and another one with df_movie.

Parameters:

  • shared_yaxis= True: To make a bidirectional bar chart; the bar chart needs to share theΒ y-axis
  • horizontal_spacing=0: Space between both the bar charts should be 0. If you want space between the 2 bar charts then specify the value in this parameter.
  • orientation: We can see the bar chart in two forms one is horizontal and another one is theΒ vertical
  • text: The value which we are seeing on the bar is being displayed with β€˜text’ parameter.
  • name: It will specify the name of the legends (Movie, TVΒ Show)
  • marker_color: You can specify any color you want for theΒ bars.

For further details in the parameters give a look at thisΒ blog.

These are the additional parameters to look the bar chart more attractive.

fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False, categoryorder='total ascending',
ticksuffix=' ', showline=False)
fig.update_traces(hovertemplate=None)
fig.update_layout(title='Which has the highest rating TV shows or Movies?',
margin=dict(t=80, b=0, l=70, r=40),
hovermode="y unified",
xaxis_title=' ', yaxis_title=" ",
plot_bgcolor='#333', paper_bgcolor='#333',
title_font=dict(size=25, color='#8a8d93',
family="Lato, sans-serif"),
font=dict(color='#8a8d93'),
legend=dict(orientation="h", yanchor="bottom",
y=1, xanchor="center", x=0.5),
hoverlabel=dict(bgcolor="black", font_size=13,
font_family="Lato, sans-serif"))
fig.add_annotation(dict(x=0.81, y=0.6, ax=0, ay=0,
xref = "paper", yref = "paper",
text= "<b>97%</b> people prefer Movies over TV Shows on Netflix.<br> Large number of people watch TV-MA rating <br> Movies which are for mature audience."
))
fig.add_annotation(dict(x=0.2, y=0.2, ax=0, ay=0,
xref = "paper", yref = "paper",
text= "<b>3%</b> people prefer TV Shows on Netflix.<br> There is no inappropriate content for<br> ages 17 and under in TV Shows."
))
# bar plot for movies
fig.append_trace(go.Bar(x=df_movie.rating, y=df_movie.movie, orientation='h', showlegend=True, text=df_movie.rating,
name='Movie', marker_color='#b20710'), 1, 2)
fig.update_xaxes(showgrid=False)
fig.update_yaxes(showgrid=False, categoryorder='total ascending', ticksuffix=' ', showline=False)
fig.update_traces(hovertemplate=None)
fig.update_layout(title='Which has the highest rating TV shows or Movies?',
margin=dict(t=80, b=0, l=70, r=40),
hovermode="y unified",
xaxis_title=' ', yaxis_title=" ",
plot_bgcolor='#333', paper_bgcolor='#333',
title_font=dict(size=25, color='#8a8d93', family="Lato, sans-serif"),
font=dict(color='#8a8d93'),
legend=dict(orientation="h", yanchor="bottom", y=1, xanchor="center", x=0.5),
hoverlabel=dict(bgcolor="black", font_size=13, font_family="Lato, sans-serif"))
fig.add_annotation(dict(x=0.81, y=0.6, ax=0, ay=0,
xref = "paper", yref = "paper",
text= "<b>97%</b> people prefer Movies over TV Shows on Netflix.<br> Large number of people watch TV-MA rating <br> Movies which are for mature audience."
))
fig.add_annotation(dict(x=0.2, y=0.2, ax=0, ay=0,
xref = "paper", yref = "paper",
text= "<b>3%</b> people prefer TV Shows on Netflix.<br> There is no inappropriate content for<br> ages 17 and under in TV Shows."
))

Steps to make thisΒ chart:

Changing the color of bars in theΒ chart.

  • Choosing appropriate colors like red and black which are in the Netflix logo. You can choose any color you want but choose contrast color when you have charts that need a comparison like the aboveΒ chart.

Setting the background color of theΒ chart.

  • Setting the background and bar color should be always different like in this case the bar color for a TV Show is a darker shade of black and the background is a lighter shade of black. We can easily differentiate both the bar and background.

Giving appropriate Title to theΒ chart.

  • Most of the time people use a title that is very basic like β€˜Type vs Rating’ this title is not wrong but having a Title that automatically tells you about the chart is a very crucialΒ step.
  • The title which we use here is β€˜Which has the highest Rating TV Shows or Movies on Netflix?’ This title automatically tells us that the below chart will be a comparison between TV Show and Movie for Ratings and additionally it also states that the data which we are looking for is fromΒ Netflix.

Adding text to theΒ bar

  • When should you add text to the bar it depends on the useΒ case.
  • Let’s take an example like here in the above chart when we compare the TV shows and Movies with Ratings. In TV Show β€˜R’ rating does have value and, β€˜PG-13’, β€˜PG’, etc do not have any value. The audience might don’t see this information as its value is very less that’s why it is important to set the text on theΒ bars.
  • Additionally, it is easy to compare side-by-side bars for TV shows and Movies VsΒ Ratings.

Adding an annotation toΒ charts

  • Here I have given information like 97% of the audience prefer Movies over TV Show. Laying out more information related to charts is the best way you can present theΒ chart.

Setting different colors for text on the bar, Title, and annotation.

  • You should always follow thisΒ Rule:
  • Title: Font for the title should be alwaysΒ bigger
  • Text on Bar: Text on the bar should be always smaller than the main title of theΒ chart.
  • By using this rule the charts you make will look good, So always follow this rule of title, annotation, and text on theΒ bar.

If you find this article useful do likeΒ it.

Other Resources:

Bar racing charts withΒ Plotly


Tips and tricks for Plotly Bar Chart was originally published in Towards AI on Medium, where people are continuing the conversation by highlighting and responding to this story.

Published via Towards AI

Feedback ↓