When I first started working with Matplotlib loglog plots in Python, I quickly realized how powerful they are for visualizing data that spans several orders of magnitude.
I’ve often needed to switch the logarithmic base from the default (base 10) to base 2, especially when working with data related to computer science, binary growth, or memory scaling.
Another challenge I faced was dealing with negative values in log-log plots. Since logarithmic scales can’t handle zero or negative numbers directly, I had to find workarounds that allowed me to keep my data meaningful without breaking the visualization.
In this tutorial, I’ll walk you through my firsthand experience of using Matplotlib loglog with base 2 and handling negative values in Python.
Use Base 2 in Matplotlib Loglog
When I work with problems involving binary growth, such as analyzing algorithm complexity or CPU memory usage, using base 2 for log-log plots makes the results much easier to interpret.
Here are two methods I use to set the base to 2 in Matplotlib loglog plots.
Method 1 – Use plt.loglog with basex and basey
The most direct way is to pass the basex and basey arguments to the plt.loglog function. This allows me to explicitly set both axes to use base 2.
import matplotlib.pyplot as plt
import numpy as np
# Sample dataset: doubling growth pattern
x = np.arange(1, 20)
y = 2 ** x
# Create loglog plot with base 2
plt.figure(figsize=(8,6))
plt.loglog(x, y, marker='o', color='blue', basex=2, basey=2)
plt.title("Loglog Plot with Base 2 in Python")
plt.xlabel("X values (base 2 scale)")
plt.ylabel("Y values (base 2 scale)")
plt.grid(True, which="both", ls="--", linewidth=0.7)
plt.show()You can see the output in the screenshot below.

This method is simple and works perfectly when you want both axes to use base 2.
Method 2 – Use set_xscale and set_yscale
Sometimes I prefer more control over the axes. In that case, I use the Axes object and call set_xscale and set_yscale separately.
import matplotlib.pyplot as plt
import numpy as np
# Example: network packet growth in powers of 2
x = np.arange(1, 10)
y = [2**i for i in range(1, 10)]
fig, ax = plt.subplots(figsize=(8,6))
# Set both axes to log scale with base 2
ax.plot(x, y, marker='s', color='green')
ax.set_xscale("log", base=2)
ax.set_yscale("log", base=2)
ax.set_title("Loglog Plot using set_xscale and set_yscale")
ax.set_xlabel("Packets (base 2 scale)")
ax.set_ylabel("Growth (base 2 scale)")
ax.grid(True, which="both", ls="--", linewidth=0.7)
plt.show()You can see the output in the screenshot below.

This method is especially useful when I want to apply different bases to each axis or customize them independently.
Handle Negative Values in Matplotlib Loglog
One of the most common issues I’ve faced is when my dataset contains negative values. Since logarithms of negative numbers are undefined in real numbers, Matplotlib loglog plots will throw an error if you try to plot them directly.
Here are two methods I use to handle negative values effectively in Python.
Method 1 – Filter Out Negative Values
The simplest approach is to filter out negative and zero values before plotting. This ensures that only valid positive values remain.
import matplotlib.pyplot as plt
import numpy as np
# Dataset with negative values
x = np.linspace(-10, 10, 100)
y = x ** 2
# Filter out non-positive values
mask = (x > 0) & (y > 0)
x_filtered = x[mask]
y_filtered = y[mask]
plt.figure(figsize=(8,6))
plt.loglog(x_filtered, y_filtered, color='red', marker='o')
plt.title("Loglog Plot After Filtering Negative Values")
plt.xlabel("X values (positive only)")
plt.ylabel("Y values")
plt.grid(True, which="both", ls="--")
plt.show()You can see the output in the screenshot below.

This method is quick, but it removes part of the dataset. I use it when the negative values are not critical for the analysis.
Method 2 – Use Symmetrical Log Scale (symlog)
When I want to keep negative values visible, I use a symlog scale. This allows me to plot both positive and negative values by applying a linear scale near zero and a log scale elsewhere.
import matplotlib.pyplot as plt
import numpy as np
# Dataset with negative values
x = np.linspace(-50, 50, 500)
y = x ** 3
fig, ax = plt.subplots(figsize=(8,6))
# Apply symmetrical log scale
ax.plot(x, y, color='purple')
ax.set_xscale("symlog", linthresh=1)
ax.set_yscale("symlog", linthresh=1)
ax.set_title("Loglog-like Plot with Negative Values using symlog")
ax.set_xlabel("X values (symlog scale)")
ax.set_ylabel("Y values (symlog scale)")
ax.grid(True, which="both", ls="--")
plt.show()You can see the output in the screenshot below.

This method is great when I want to preserve negative values while still benefiting from logarithmic scaling in Python.
Practical Use Cases in the USA
In my projects with U.S.-based datasets, I often use log-log plots to analyze:
- Internet traffic growth (packets often double in size).
- Financial data such as stock returns, where negative values are common.
- Population growth in U.S. cities where exponential scaling is relevant.
- Computer science problems like binary tree depth or memory allocation in base 2.
By applying the methods above, I can visualize these datasets clearly without losing important information.
Working with Matplotlib loglog plots in Python has been a key part of my data visualization journey. When I need to analyze binary-related growth, I always switch to base 2 scaling, which makes interpretation much more intuitive.
When dealing with negative values, I either filter them out for clarity or use symlog to keep them visible without errors. Both of these techniques have saved me countless hours when working with real-world datasets in the USA, from financial data to computer science problems.
You may like to read:
- Python Matplotlib Add a Colorbar to Each Subplot
- How to Create 3D Subplots in Matplotlib Python
- Matplotlib subplots_adjust for Bottom and Right Margins
- Why is matplotlib subplots_adjust Not Working in Python

I am Bijay Kumar, a Microsoft MVP in SharePoint. Apart from SharePoint, I started working on Python, Machine learning, and artificial intelligence for the last 5 years. During this time I got expertise in various Python libraries also like Tkinter, Pandas, NumPy, Turtle, Django, Matplotlib, Tensorflow, Scipy, Scikit-Learn, etc… for various clients in the United States, Canada, the United Kingdom, Australia, New Zealand, etc. Check out my profile.