Skip to content

Instantly share code, notes, and snippets.

View jkrumbiegel's full-sized avatar

Julius Krumbiegel jkrumbiegel

View GitHub Profile
@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"))
@recipe(AxisFunction) do scene
default_theme(scene, Lines)
end
Makie.data_limits(::AxisFunction) = Rect3f(Point3f(NaN), Vec3f(NaN))
Makie.boundingbox(::AxisFunction, space::Symbol = :data) = Rect3f(Point3f(NaN), Vec3f(NaN))
function Makie.plot!(p::AxisFunction)
func = p[1]
# # could use transf to compute points equidistant in transformed space
@jkrumbiegel
jkrumbiegel / legend_override_markersize.jl
Created May 31, 2024 11:32
Makie override axis scatter markersize in Legend
f, ax, sc = scatter(cumsum(randn(1000)), markersize = 3, label = "Scatter")
leg = Legend(f[1, 2], ax)
leg.entrygroups[][1][2][1].elements[1].attributes.markersize = Observable(10)
notify(leg.entrygroups)
f