Ren*_*ene 3 data-visualization heatmap julia makie.jl
我想使用 Makie (CairoMakie) 在 Julia 中制作一张热图,轴上带有自定义值x和刻度值,就像 Seaborn 中的这个一样。y
有关如何修改数字以将Y 轴上January的月份和X 轴上的年份的任何建议。December19491960
到目前为止我的代码:
using DataFrames
using CSV
using CairoMakie
download("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/flights.csv", "flights.csv")
flights = DataFrame(CSV.File("flights.csv"))
data = Array(unstack(flights, :year, :month, :passengers)[!, 2:end])
fig = Figure()
ax = Axis(fig[1, 1], xlabel = "Year", ylabel = "Month")
hm = heatmap!(ax, data)
Colorbar(fig[1, 2], hm)
text!(ax,
string.(data'),
position = [Point2f(x, y) for x in 1:12 for y in 1:12],
align = (:center, :center),
color = ifelse.(data' .< 400, :white, :black),
textsize = 14,
)
save("figure.png", fig)
fig
Run Code Online (Sandbox Code Playgroud)
如果您只想手动设置刻度,您可以这样做:
using Dates
ax.yticks = 1:12
ax.ytickformat = x -> Dates.monthname.(Int.(x))
ax.xticks = 1:12
ax.xtickformat = x -> string.(x .+ 1948)
Run Code Online (Sandbox Code Playgroud)
不过,有一种更好的方法可以做到这一点。您可以通过在数据矩阵之前传递 x 和 y 的向量或范围来指定热图的数据范围。
您可以通过简单地传递所需的 x 和 y 范围来完成此操作,如下所示:
f = download("https://raw.githubusercontent.com/mwaskom/seaborn-data/master/flights.csv")
flights = DataFrame(CSV.File(f))
data = unstack(flights, :year, :month, :passengers)
years = data.year
mat = Array(data[!, 2:end])
heatmap(years, 1:12, mat; axis = (yticks = 1:12, ytickformat = x -> Dates.monthname.(Int.(x)), xticks = years))
text!(
string.(data'),
position = [Point2f(x, y) for x in 1:12 for y in 1:12],
align = (:center, :center),
color = ifelse.(data' .< 400, :white, :black),
textsize = 14,
)
Run Code Online (Sandbox Code Playgroud)
当然,您可以扩展它,但适合您的口味。
| 归档时间: |
|
| 查看次数: |
2752 次 |
| 最近记录: |