Skip to content

Commit a91c93b

Browse files
Merge pull request #218 from Speedrunyourknowledge/feature/axis-lines
Fix padding sometimes not displaying in graphs
2 parents 55fca6e + 4c899b6 commit a91c93b

File tree

2 files changed

+23
-10
lines changed

2 files changed

+23
-10
lines changed

calc-backend/graph-gen/graph-deriv.py

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,26 @@ def derivative(func, x, h=1e-5):
4444
# Initialize the Plotly figure
4545
fig = go.Figure()
4646

47-
# Adjust padding for final layout
48-
pad = min(np.abs(np.min(f_vals)), np.abs(np.max(f_vals))) + (max(np.abs(np.min(f_vals)), np.abs(np.max(f_vals))) // 20)
47+
# Calculate y-axis padding
48+
f_range = np.max(f_vals) - np.min(f_vals)
49+
# 5% of range or at least 0.1
50+
pad = max(f_range * 0.05, 0.1)
4951

5052
# Set the final y-axis range with padding
5153
y_min = np.min(f_vals) - pad
52-
y_max = np.max(f_vals) + pad
54+
# No padding on top to avoid cutting off curve
55+
y_max = np.max(f_vals)
56+
57+
# Calculate x-axis padding
58+
x_range_val = x_range[1] - x_range[0]
59+
x_pad = max(x_range_val * 0.05, 0.1)
60+
61+
# Set the final x-axis range with padding
62+
x_min = x_range[0] - x_pad
63+
x_max = x_range[1] + x_pad
5364

5465
# Vertical line at x=0 (y-axis)
55-
if x_range[0] < 0 < x_range[1]:
66+
if x_min < 0 < x_max:
5667
fig.add_trace(go.Scatter(
5768
x=[0, 0],
5869
y=[y_min, y_max],
@@ -64,7 +75,7 @@ def derivative(func, x, h=1e-5):
6475
# Horizontal line at y=0 (x-axis)
6576
if y_min < 0 < y_max:
6677
fig.add_trace(go.Scatter(
67-
x=[x_range[0], x_range[1]],
78+
x=[x_min, x_max],
6879
y=[0, 0],
6980
mode='lines',
7081
line=dict(color='silver', width=2),
@@ -101,12 +112,12 @@ def derivative(func, x, h=1e-5):
101112
frame_data=[]
102113

103114
# Conditionally add vertical line at x=0
104-
if x_range[0] < 0 < x_range[1]:
115+
if x_min < 0 < x_max:
105116
frame_data.append(go.Scatter(x=[0, 0], y=[y_min, y_max]))
106117

107118
# Conditionally add horizontal line at y=0
108119
if y_min < 0 < y_max:
109-
frame_data.append(go.Scatter(x=[x_range[0], x_range[1]]))
120+
frame_data.append(go.Scatter(x=[x_min, x_max], y=[0, 0]))
110121

111122
# Placeholder for the function trace (remains unchanged)
112123
frame_data.append(go.Scatter())
@@ -149,7 +160,7 @@ def derivative(func, x, h=1e-5):
149160
fig.update_layout(
150161
xaxis_title='x-axis',
151162
yaxis_title='y-axis',
152-
xaxis=dict(range=[x_range[0], x_range[1]], fixedrange=True),
163+
xaxis=dict(range=[x_min, x_max], fixedrange=True),
153164
yaxis=dict(range=[y_min, y_max], fixedrange=True),
154165
sliders=sliders,
155166
uirevision='static',

calc-backend/graph-gen/graph-integral.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ def generate_bars(n_bars):
6060

6161
fig.update_traces(hovertemplate="(%{x:.2f}, %{y:.2f})", name="Function", showlegend=False)
6262

63-
# Adjust padding for final layout
64-
pad = min(np.abs(np.min(y_line)), np.abs(np.max(y_line))) + (max(np.abs(np.min(y_line)), np.abs(np.max(y_line))) // 20)
63+
# Calculate y-axis padding
64+
f_range = np.max(y_line) - np.min(y_line)
65+
# 5% of range or at least 0.1
66+
pad = max(f_range * 0.05, 0.1)
6567

6668
# Set the final y-axis range with padding
6769
y_min = np.min(y_line) - pad

0 commit comments

Comments
 (0)