Skip to content

Instantly share code, notes, and snippets.

View jkrumbiegel's full-sized avatar

Julius Krumbiegel jkrumbiegel

View GitHub Profile
@jkrumbiegel
jkrumbiegel / makie_slopeline_screen_space.jl
Created April 2, 2025 14:15
Makie slopeline length in screen space
using LinearAlgebra: normalize
f = Figure()
ax1 = Axis(f[1, 1])
slope1 = 2
data1 = [1 0; slope1 1] * randn(2, 500)
scatter!(ax1, data1, alpha = 0.1)
ax2 = Axis(f[1, 2])
slope2 = -0.5
data2 = [1 0; slope2 1] * randn(2, 500)
@jkrumbiegel
jkrumbiegel / stacked_twin_axes.jl
Created March 27, 2025 13:18
Stacked twin axis Makie
f = Figure()
main_ax = Axis(f[1, 1])
twin_ax_layout = GridLayout(f[1, 1, Right()])
twin_axis_pairs = map(1:3) do i
data_axis = Axis(f[1, 1])
label_axis = Axis(twin_ax_layout[1, i], width = 0, alignmode = Outside(), yaxisposition = :right)
hidedecorations!(data_axis)
hidespines!(data_axis)
hidexdecorations!(label_axis)
linkyaxes!(data_axis, label_axis)
@jkrumbiegel
jkrumbiegel / makie_hexagon_axis.jl
Created March 12, 2025 18:50
Makie hexagon axis plot
hexradius = 45
hexpoly(p, hexradius) = Makie.Polygon(Ref(p) .+ Point2f[hexradius .* (cos(a), sin(a)) for a in range(pi / 6, 13pi / 6; length=7)[1:6]])
s = Scene(camera = campixel!)
function hex_center(q::Int, r::Int, radius)
# axial coordinates
x = radius * sqrt(3) * (r + q / 2)
y = radius * (3/2) * q
@jkrumbiegel
jkrumbiegel / makie_text_boundingboxes.jl
Created January 21, 2025 14:58
Makie text boundingboxes
using GLMakie
f = Figure()
ax = Axis(f[1, 1])
scatter!(ax, -1..2, randn(20_000), marker = 'O')
t = text!(ax,
[(0, 0), (1, 0), (0.5, 1)],
text = ["Hello", "Bonjour", "Guten Tag"],
@jkrumbiegel
jkrumbiegel / glmakie_discrete_poly_shift.jl
Created January 20, 2025 19:27
glmakie shift polys in discrete steps
using GLMakie
using Makie.GeometryBasics: Polygon
polys = [
Point2f[(0, 0), (3, 0), (3, 1), (2, 1), (2, 2), (1, 2), (1, 1), (0, 1)],
Point2f[(0, 0), (2, 0), (2, 2), (0, 2)] .+ Point2f(4, 4),
]
shifts = Observable([Point2f(0, 0) for _ in polys])
@jkrumbiegel
jkrumbiegel / date_folder.applescript
Created January 9, 2025 14:40
Capture One move to date-annotated folder
use AppleScript version "2.4" -- Yosemite (10.10) or later
use framework "Foundation"
use scripting additions
tell application "Capture One"
tell current document
set _variants to every variant whose selected is true
-- Initialize variables to store the first and last date
set startDate to missing value
@jkrumbiegel
jkrumbiegel / cairomakie_svg_around_axis.jl
Created December 6, 2024 13:16
save cairomakie svg around axis
using CairoMakie
using GLMakie
GLMakie.activate!()
f = Figure()
for i in 1:3, j in 1:3
Axis(f[i, j], title = "$i $j")
end
display(f)
@jkrumbiegel
jkrumbiegel / striped_line_makie.jl
Last active November 22, 2024 13:49
Striped line Makie
using LinearAlgebra
@recipe(Stripy) do scene
Attributes(;
Makie.default_theme(scene, Lines)...,
n = 3,
offset = 10,
)
end
@jkrumbiegel
jkrumbiegel / makie_menu_bar.jl
Created November 18, 2024 10:43
Makie top menu bar
using GLMakie
f = Figure(figure_padding = 0)
topbar = GridLayout(f[1, 1], default_colgap = 1, halign = :left, tellwidth = false)
Box(f[1, 1], strokewidth = 0)
Button(topbar[1, 1], label = "Button", cornerradius = 0)
Menu(topbar[1, 2], options = ["Menu A", "Menu B", "Menu C"], width = 100)
maingl = GridLayout(f[2, 1], alignmode = Outside(16))
Axis(maingl[1, 1])
f
@jkrumbiegel
jkrumbiegel / typesetting.jl
Created September 28, 2024 06:46
Latex or typst like matrix or table typesetting in Makie
using CairoMakie
f = Figure(fonts = (; regular = "CMU"))
Label(f[1, 1], "Weights", fontsize = 20)
gl = GridLayout(f[2, 1])
for i in 1:5, j in 1:5
text = if i <=3 && j <= 3
rich("w", subscript("$i,$j"))