abstract decorative image of polkadots on a purple background

Data Visualization Tools and Tips: Crafting Data-Driven Narratives in Adtech

If you are eager to seize opportunities in the adtech industry as a data/business analyst, this article might be exactly what you need to help you get started.

As a Business Intelligence Analyst at adjoe, I have experienced firsthand the transformative power of data visualization in shaping our business strategy and making data-driven decisions. These decisions include implementing a new feature, rolling out a promotion, optimizing campaign distribution, etc.  

In this article, I’ll delve into the various languages, libraries, and data visualization tools and types that we use to convey complex information in an easily digestible and visually appealing manner.

Which Languages and Libraries Can You Use for Data Visualization?

To start with, we’ll explore the commonly used data visualization languages and libraries.


Several programming languages and libraries stand out for their versatility and capabilities. Python data visualization libraries such as Matplotlib, Seaborn, and Plotly, are popular choices due to their user-friendly syntax and extensive visualization functionalities. 

Here’s a summary of the Python libraries that are most commonly used: 

  1. Matplotlib: Matplotlib is one of the most widely used libraries for creating static, high-quality visualizations in Python. It provides a versatile and flexible API for constructing a wide range of plots and charts, including line charts, bar plots, scatter plots, histograms, heatmaps, and more. Matplotlib is a great choice for basic visualizations and is highly customizable. It allows you to control every aspect of the plot, from colors and markers to axis labels and annotations.
  1. Seaborn: Seaborn is a higher-level data visualization library built on top of Matplotlib. It simplifies the process of creating more sophisticated and visually appealing statistical graphics. Seaborn comes with a variety of prebuilt themes and color palettes. This makes it effortless to produce attractive visualizations with just a few lines of code.
  1. Plotly: Plotly is an interactive data visualization library that provides a range of visualizations, including line charts, scatter plots, bar charts, heatmaps, and more. What sets Plotly apart is its ability to generate interactive web-based visualizations that users can explore and interact with. 


R, known for its statistical capabilities, is another powerful language for data visualization. The ggplot2 library in R gives you elegant and expressive visualizations with a focus on The Grammar of Graphics principles. This makes it ideal for creating plots and charts to a publishable standard. ggplot2 gives you the flexibility of personalizing nearly every facet of your visualizations, spanning chart styles, color palettes, and labeling.

Here’s an overview of some of ggplot2 possibilities: 

Check https://r-graph-gallery.com/ggplot2-package.html for more.

Plotly library is also available in R and allows you to create interactive visualizations.

Data Visualization Tools: Which Are the Most Popular?

Data visualization tools can be a very good alternative – not only for data scientists and business intelligence analysts but also for individuals who don’t have a coding background.

According to Forbes’ latest research published in July 2023, the top-three data visualization tools that are most commonly used by small businesses are: Microsoft Power BI, Tableau, and Qlik Sense.

  • Microsoft Power BI is a cloud-based business analytics service provided by Microsoft. Power BI offers an intuitive drag-and-drop interface for building interactive reports, dashboards, and data visualizations.
  • Tableau is a powerful data visualization and BI software known for its robust features and being easy to use. Tableau’s strength lies in its ability to quickly create stunning visualizations and dashboards. This makes data analysis accessible to users of all skill levels.
  • Qlik Sense is another popular self-service BI tool that focuses on user-driven data exploration and discovery. It enables users to create interactive visualizations, dashboards, and reports using a simple and intuitive interface.

To add to the list, one of the tools that we commonly use at adjoe is Amazon Quicksight.

  • Amazon QuickSight is a cloud-based business intelligence service provided by Amazon Web Services (AWS). It supports various data sources, including AWS data services like Amazon Redshift, Athena, and S3. One of the top advantages of using Quicksight is that it ensures data security by applying AWS security measures, including encryption, access controls, and data governance policies. This ensures that sensitive information is only accessible to authorized individuals.

The Future of Data Visualization: from Instructions to Advanced Dashboards

Imagine providing instructions to a tool and, like a skilled assistant, it constructs a customized dashboard tailored to your precise requirements. Today we have many AI-powered platforms that utilize natural language processing (NLP) and machine learning to interpret your instructions. They pull the relevant data sources, apply appropriate data visualization types, and arrange them into coherent, insightful displays. 

Tableau Ask Data is one of many examples. It’s a feature that allows users to type in natural language questions about their data, and the tool generates visualizations and dashboards in response. By simply typing questions like “Show me sales by region,” users can quickly obtain relevant insights without needing to design the visualization from scratch.

Choosing the Right Chart Type for the Right Story 

Now that we’ve explored various data visualization tools, the next critical question arises: “Which chart type is best suited for specific problems?”

I’ll explore this question next in the context of adtech and provide insights into how you select the ideal chart type based on the nature of the data and the insights you want to highlight. (Please note that the data used to create the visualizations below is for illustrative purposes only. It’s not based on real data.)

The most common data visualization topics include: 

1. Showing Change over Time

Visualizations like line charts and bar charts are powerful tools for showcasing trends and changes in user behavior, game performance, and ad metrics over time. In adtech, analyzing user engagement trends, revenue growth, or click-through rates across different periods can help identify seasonal patterns, market fluctuations, and future marketing strategies.

import numpy as np

import matplotlib.pyplot as plt

# Sample data - Average user time spent on games (in minutes) since 2019 by month

months = ['Jan 2019', 'Feb 2019', 'Mar 2019', 'Apr 2019', 'May 2019', 'Jun 2019',

          'Jul 2019', 'Aug 2019', 'Sep 2019', 'Oct 2019', 'Nov 2019', 'Dec 2019',

          'Jan 2020', 'Feb 2020', 'Mar 2020', 'Apr 2020', 'May 2020', 'Jun 2020',

          'Jul 2020', 'Aug 2020', 'Sep 2020', 'Oct 2020', 'Nov 2020', 'Dec 2020',

          'Jan 2021', 'Feb 2021', 'Mar 2021', 'Apr 2021', 'May 2021', 'Jun 2021']

# Sample data for average time spent on games (in minutes) since 2019 by month

time_spent = [50, 55, 52, 48, 49, 53,

              57, 58, 60, 62, 63, 61,

              65, 68, 85, 90, 120, 130,

              135, 120, 90, 95, 110, 92,

              95, 80, 85, 83, 81, 84]

# Plotting the bar chart

plt.figure(figsize=(12, 6))

plt.bar(months, time_spent, color='blue')

plt.xticks(rotation=45, ha='right')


plt.ylabel('Average Time Spent (minutes)')

plt.title('Average User Time Spent on Games since 2019 by Month')

plt.grid(axis='y', linestyle='--')


data visualization tool showing average user time spent on games since 2019

This bar chart displays the average time users spent on games from 2019 by month. We observe a steady increase in time spent on games from January 2019 to February 2020, with minor fluctuations. 

However, starting from March 2020 – marked by the beginning of the COVID-19 pandemic – there is a significant increase in the average time spent. As lockdowns and restrictions were implemented worldwide, people spent more time indoors. This led to a surge in gaming activity in the months from March to August 2020. 

2. Showing a Part-to-Whole Composition

Pie charts and stacked bar charts are ideal for illustrating the distribution of users, revenue sources, or ad impressions among different categories or segments. For example, a pie chart can represent the proportion of users engaged in various game genres. A stacked bar chart can display the revenue breakdown by in-app purchases and ad revenue.

import matplotlib.pyplot as plt

# Sample data - Additional game genres and user counts

categories = ['Action', 'Adventure', 'RPG', 'Puzzle', 'Simulation', 'Strategy', 'Sports', 'Arcade']

user_counts = [4500, 3500, 3000, 2500, 2000, 1800, 1500, 1200]

# Explode the slice with the highest user count

explode = [0.1 if count == max(user_counts) else 0 for count in user_counts]

# Plotting the pie chart

plt.figure(figsize=(8, 8))

plt.pie(user_counts, labels=categories, explode=explode, autopct='%1.1f%%', startangle=90)


plt.title('User Distribution by Game Genre')

pie chart showing user distribution by game genre

The pie chart represents a part-to-whole composition of user distribution across eight different game genres. Each slice of the pie chart represents the proportion of users engaged in a specific game genre. This enhanced pie chart provides a comprehensive view of user distribution across various game genres. It allows adjoe’s Demand team to identify which genres they need to show more to users to increase engagement.

3. Showing How Data Is Distributed

Bar charts and histograms are commonly used to visualize the distribution of time spent in an app, or in-app purchase amounts. Understanding the distribution of data helps identify outliers, discover trends, and make data-driven decisions regarding targeting or improve features.

import numpy as np

import matplotlib.pyplot as plt

# Sample data - In-app purchases amounts (in dollars)

in_app_purchases = np.random.normal(loc=50, scale=10, size=1000)

# Plotting the histogram

plt.figure(figsize=(8, 6))

plt.hist(in_app_purchases, bins=20, edgecolor='black', color='lightblue')

plt.xlabel('In-app Purchases (dollars)')


plt.title('Distribution of In-app Purchases')

plt.grid(axis='y', linestyle='--')


bar chart showing distribution of in-app purchases in adtech

In this code, we generated random data for in-app purchases using a normal distribution with a mean of 50 dollars and a standard deviation of 10 dollars. You can replace this data with your actual dataset containing the in-app purchase amounts.

By examining the histogram, we can gain insights into the distribution of in-app purchases. These include the central tendency (mean and median), spread (variance and standard deviation), and the presence of any outliers or skewed behavior. This information is valuable for understanding user spending patterns and tailoring monetization strategies.

4. Comparing Values between Different Groups

Line charts and grouped bar charts are effective for comparing performance metrics between different user segments or ad campaigns. These visualizations enable us to assess the effectiveness of marketing strategies, A/B test results, or the performance of different users from different acquisition channels.

import pandas as pd

import seaborn as sns

import matplotlib.pyplot as plt

# Create the DataFrame

group_a = ['Group A', 0.42, 22]

group_b = ['Group B', 0.55, 30]

metrics = ['Group', 'Metric 1 (Conversion Rate)', 'Metric 2 (Avg. Revenue per User)']

data = [group_a, group_b]

df = pd.DataFrame(data, columns=metrics)

# Create subplots

fig, axes = plt.subplots(nrows=2, ncols=1, figsize=(10, 8))

# Plot Metric 1 (Conversion Rate) by group

sns.barplot(data=df, x='Group', y='Metric 1 (Conversion Rate)', ax=axes[0], palette='Blues')

axes[0].set_ylim(0, 0.7)  # Set y-axis limits for Metric 1

axes[0].set_title('Metric 1 (Conversion Rate) by Group')

# Plot Metric 2 (Avg. Revenue per User) by group

sns.barplot(data=df, x='Group', y='Metric 2 (Avg. Revenue per User)', ax=axes[1], palette='Greens')

axes[1].set_ylim(0, 40)  # Set y-axis limits for Metric 2

axes[1].set_title('Metric 2 (Avg. Revenue per User) by Group')

# Adjust layout


# Show the plots

bar graph showing conversion rate and revenue per user

In this chart, we have two metrics, Metric 1 (conversion rate) and Metric 2 (average revenue per user), for two A/B test groups: Group A and Group B. The results of the A/B test are displayed in the grouped bar chart, where one feature is implemented for one group and disabled for the second.

This visualization helps you understand the impact of the A/B test. You can identify which group performs better in terms of the chosen metrics. The insights gained from this chart can help teams make decisions to go through with a new feature or not.

5. Observing Relationships between Variables

Scatter plots are excellent for visualizing relationships between two variables, such as user activity and in-app purchases or ad spend and conversion rates. By observing patterns and correlations in the scatter plot, we can identify opportunities to optimize monetization strategies or improve user engagement.

import numpy as np

import matplotlib.pyplot as plt

# Sample data

user_activity = np.random.normal(loc=70, scale=10, size=100)

in_app_purchases = user_activity * np.random.uniform(0.1, 0.3, size=100)

plt.scatter(user_activity, in_app_purchases, color='b')

plt.xlabel('User Activity')

plt.ylabel('In-app Purchases')

plt.title('Relationship between User Activity and In-app Purchases')

scatter plot showing correlation between user activity and in-app purchases

The scatter plot visualizes the relationship between user activity and in-app purchases. In this example, there is a positive correlation between user activity and in-app purchases. As user activity increases, the corresponding in-app purchases also tend to increase. This indicates that more engaged users are more likely to make in-app purchases. Understanding this relationship can help us devise strategies to enhance user engagement and, consequently, increase in-app revenue.

6. Looking at Geographical Data

Choropleths and cartograms are valuable for analyzing user distribution, ad performance, or regional variations in engagement. Geospatial visualizations help us identify target regions, optimize ad targeting, and tailor marketing campaigns to specific geographic areas.

import geopandas as gpd

import matplotlib.pyplot as plt

from matplotlib.cm import ScalarMappable

# Sample geospatial data for countries

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# Sample ad spending data for each country (arbitrary values for demonstration)

ad_spending_data = {

    'Canada': 1000,

    'Brazil': 150,

    'Germany': 700,

    'France' : 730,

    'Italy' : 570,

    'India': 800,

    'China': 950,

    'Australia': 500,

    'Japan': 650,

    'South Africa': 70


# Create a GeoDataFrame for ad spending data with country geometries

ad_spent = gpd.GeoDataFrame.from_dict(ad_spending_data, orient='index', columns=['ad_spent'])

ad_spent['geometry'] = world.set_index('name').reindex(ad_spent.index)['geometry']

# Calculate the correct vmin and vmax for the color scale

vmin = ad_spent['ad_spent'].min()

vmax = ad_spent['ad_spent'].max()

# Plotting the choropleth map with a manual legend

fig, ax = plt.subplots(figsize=(12, 8))

world.plot(ax=ax, color='lightgray', edgecolor='black')

ad_spent.plot(column='ad_spent', cmap='OrRd', linewidth=0.8, edgecolor='black', legend=True, legend_kwds={'label': 'Ad Spending (Dollars)'}, alpha=0.7, vmin=vmin, vmax=vmax, ax=ax)



ax.set_title('Ad Spending Distribution on a Map')


global ad distribution

The map reveals significant disparities in ad spend between countries. Canada and China stand out as the top spenders, represented by the darkest shades of red. These countries are the major players with large markets and high investment in advertising.

This helps us to identify growth potential. Some countries – South Africa and Brazil – have lower ad spend values compared to the global leaders. This could indicate untapped potential and growth opportunities for advertisers to expand their reach in these regions.

Enabling Strategic Decisions in Adtech

By utilizing languages like Python and R, along with various other data visualization tools and platforms, we can create engaging and informative data stories that resonate with stakeholders. Whether it’s clients, executives and strategists, or other data scientists. We explored how data visualization can present complex data in an accessible and universal manner. However, to fully harness its potential, it’s essential to tailor it to suit the specific needs and preferences of these different audiences.

Understanding the appropriate data visualization type for each use case ensures that our insights are communicated effectively. This enables adjoe to optimize its performance and stay ahead in the competitive and fast-moving adtech landscape.

Drive Change; Strive for Insights

Join Our Tech Team