Log scale helps us see data that changes a lot by shrinking big numbers and stretching small ones. Symlog scale lets us do this even if data has negative or zero values.
Log scale and symlog scale in Matplotlib
ax.set_xscale('log') ax.set_yscale('log') ax.set_xscale('symlog', linthresh=1) ax.set_yscale('symlog', linthresh=1)
Use 'log' for normal logarithmic scale (only positive values allowed).
Use 'symlog' for symmetric log scale that handles negative and zero values with a linear region around zero defined by linthresh.
import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.plot([1, 10, 100, 1000]) ax.set_yscale('log') plt.show()
import matplotlib.pyplot as plt import numpy as np x = np.linspace(-10, 10, 400) y = x**3 fig, ax = plt.subplots() ax.plot(x, y) ax.set_yscale('symlog', linthresh=100) plt.show()
This program shows two plots: one with log scale only for positive y values, and one with symlog scale that handles negative y values smoothly.
import matplotlib.pyplot as plt import numpy as np # Data with wide range and negative values x = np.linspace(-100, 100, 500) y = x**3 fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(6,8)) # Normal log scale (only positive values) ax1.plot(x[x>0], y[x>0]) ax1.set_yscale('log') ax1.set_title('Log scale (positive y only)') # Symlog scale (handles negative and zero) ax2.plot(x, y) ax2.set_yscale('symlog', linthresh=100) ax2.set_title('Symlog scale (handles negative values)') plt.tight_layout() plt.show()
Log scale cannot show zero or negative values; it will cause errors if used directly.
Symlog scale uses a linear region near zero to avoid issues with zero and negative values.
Adjust linthresh in symlog to control the size of the linear region around zero.
Log scale helps visualize data that changes exponentially but only works with positive values.
Symlog scale extends log scale to include negative and zero values by adding a linear zone near zero.
Use symlog when your data includes negative or zero values but you want log-like scaling.
Practice
log scale and a symlog scale in matplotlib?Solution
Step 1: Understand log scale limitations
Log scale transforms data using logarithms and only supports positive values because logarithm of zero or negative numbers is undefined.Step 2: Understand symlog scale features
Symlog scale combines linear and logarithmic scales to handle negative, zero, and positive values by using a linear region around zero.Final Answer:
Log scale only works for positive values, while symlog can handle negative and zero values. -> Option AQuick Check:
Log scale positive only, symlog includes negatives [OK]
- Thinking log scale supports zero or negative values
- Confusing symlog with linear scale
- Assuming symlog is only for positive values
Solution
Step 1: Recall matplotlib scale setting methods
Matplotlib usesax.set_xscale()orax.set_yscale()to set axis scales.Step 2: Identify correct scale name and method
To set y-axis to symlog, useax.set_yscale('symlog'). Other options are either incorrect method names or scale names.Final Answer:
ax.set_yscale('symlog') -> Option CQuick Check:
Use set_yscale with 'symlog' string [OK]
- Using ax.set_scale instead of ax.set_yscale
- Using wrong scale name like 'logarithm'
- Trying to set scale on x-axis when y-axis is intended
import matplotlib.pyplot as plt
import numpy as np
x = np.array([-100, -10, -1, 0, 1, 10, 100])
y = x
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xscale('symlog', linthresh=1)
plt.show()Solution
Step 1: Understand symlog scale behavior
Symlog scale allows negative and zero values by using a linear region around zero defined bylinthresh.Step 2: Analyze code and data
The x values include negative, zero, and positive numbers. Setting x-axis to symlog with linthresh=1 means values between -1 and 1 are linear, outside are logarithmic.Final Answer:
A plot with x-axis showing a linear scale near zero and logarithmic scale away from zero, including negative values. -> Option DQuick Check:
Symlog handles negatives with linear region near zero [OK]
- Expecting error due to negative values on log scale
- Thinking symlog is fully logarithmic without linear region
- Assuming negative values are ignored or cause crash
import matplotlib.pyplot as plt
import numpy as np
x = np.array([-10, -5, -1, 0])
y = np.arange(4)
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xscale('log')
plt.show()Solution
Step 1: Identify cause of error
Log scale requires positive values only. The x array has negative and zero values, causing the error.Step 2: Apply symlog scale to handle negatives
Symlog scale supports negative and zero values by combining linear and log scales, so changing tosymlogfixes the error.Final Answer:
Change ax.set_xscale('log') to ax.set_xscale('symlog'). -> Option AQuick Check:
Use symlog for negative values on log scale [OK]
- Trying to plot negative values on log scale directly
- Removing data instead of changing scale
- Changing unrelated axis scale
Solution
Step 1: Understand data range and requirements
Data includes negative, zero, and positive values from -1000 to 1000. We want log scale for large values but linear near zero to avoid distortion.Step 2: Choose appropriate scale and parameters
Log scale cannot handle negatives or zero. Symlog scale supports negatives and zero by mixing linear region near zero (controlled bylinthresh) and log scale outside.Step 3: Evaluate options
Useax.set_xscale('symlog', linthresh=10)to combine linear and log scales. uses symlog with linthresh=10, which fits the requirement. Useax.set_xscale('log')and filter out negative and zero values. filters data, losing information. Useax.set_xscale('linear')because log scales cannot handle negatives. uses linear scale only, losing log benefits. Useax.set_xscale('log')withlinthresh=10parameter. is invalid because log scale does not accept linthresh.Final Answer:
Use ax.set_xscale('symlog', linthresh=10) to combine linear and log scales. -> Option BQuick Check:
Symlog with linthresh mixes linear near zero and log away [OK]
- Trying to use log scale with negative values
- Filtering out negative values instead of using symlog
- Using linear scale only losing log benefits
- Using invalid parameters with log scale
Ready to prove it?
Pass the test and this pattern moves unknown
