# Heatmaps in Julia

How to make Heatmaps in Julia with Plotly.

### Heatmap

using PlotlyJS

data = [1 20 30; 20 1 60; 30 60 1]
plot(heatmap(z=data))

### Customizing the axes and labels on a heatmap

You can use the x, y and labels arguments to customize the display of a heatmap, and use Layout(xaxis_side="top") to move the x axis tick labels to the top:

using PlotlyJS

plot(
heatmap(
x=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
y=["Morning", "Afternoon", "Evening"],
z=[1 25 30 50 1; 20 1 60 80 30; 30 60 1 5 20]',
),
Layout(xaxis_side="top")
)

### Heatmap with Categorical Axis Labels

In this example we also show how to ignore hovertext when we have missing values in the data by setting the hoverongaps to false.

using PlotlyJS

plot(heatmap(
z=[[1, missing, 30, 50, 1], [20, 1, 60, 80, 30], [30, 60, 1, -10, 20]],
x=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"],
y=["Morning", "Afternoon", "Evening"],
hoverongaps=false
))

### Heatmap with Unequal Block Sizes

using PlotlyJS
# Build the rectangles as a heatmap
# specify the edges of the heatmap squares
phi = (1 + sqrt(5) )/2. # golden ratio
xe = [0, 1, 1+(1/(phi^4)), 1+(1/(phi^3)), phi]
ye = [0, 1/(phi^3), 1/phi^3+1/phi^4, 1/(phi^2), 1]

z = [13 3 3 5; 13 2 1 5; 13 10 11 12; 13 8 8 8]'

trace = heatmap(
x=sort(xe),
y=sort(ye),
z=z,
type="heatmap",
colorscale="Viridis"
)

function spiral(th)
a = 1.120529
b = 0.306349
r = a .* exp.(-b .* th)
return (r .* cos.(th), r .* sin.(th))
end

theta = range(-pi/13, stop=4*pi, length=1000)
(x, y) = spiral(theta)

trace1 = scatter(
x=x[1].-x,
y=-y[1].+y,
line=attr(color="white", width=3)
)

axis_template = attr(range = [0,1.6], autorange = false,
showgrid = false, zeroline = false,
linecolor = "black", showticklabels = false,
ticks = "" )

layout = Layout(
margin=attr(t=200, r=200,b=200,l=200),
xaxis=axis_template,
yaxis=axis_template,
showlegend=false,
width=700,
height=700,
autosize=false
)

plot([trace, trace1], layout)


### Heatmap with Datetime Axis

using PlotlyJS, Dates, Distributions

programmers = ["Alex","Nicole","Sara","Etienne","Chelsea","Jody","Marianne"]

base = Dates.now()
# Get last 180 days
dates = Dates.now() .- Dates.Day.(0:179)

z = rand(Poisson(), size(dates)[1], size(programmers)[1])

trace = heatmap(z=z, x=dates, y=programmers, colorscale="Viridis")
layout = Layout(title="Github commits per day", xaxis_nticks=36)

plot(trace, layout)