如何使用 Julia 和 Plots.jl 在专题图中使用连续色标

How to use a continuous color scale in a thematic map using Julia and Plots.jl

我想使用 Plots.jl 绘制专题图(等值线图)。我使用的 DataFrame df 有 3 列:geometryvalue1value2geometry 列的元素类型为 Polygon(使用 Shapefile 包读取数据)。 value1value2 列的元素类型为 Int64,其值 >= 0。

plot(df.geometry, color = :lightblue) 创建具有 lightblue 个多边形的地图,没有问题(并且侧面没有颜色条)。

但是,我希望 value2 列基于 colormap/colorscheme 像 viridis 一样为多边形(形状)着色,并在侧面使用相应的颜色条作为图例。

Any suggestions how to do this?

plot(shp.geometry, palette = ColorSchemes.viridis) 确实绘制了彩色地图,但是不清楚这种颜色基于哪个变量。我想手动指定(value2 列)并添加颜色条。

这是再现性和可能解决方案的完整代码。

# Load modules
using CSV
using DataFrames
using Dates
using Shapefile
using ZipFile
using Plots
using ColorSchemes

# Create directorties
for dir in ["data", "downloads", "shapefiles"]
    path = joinpath(pwd(), dir)
    if !ispath(path)
        mkpath(path)
    end
end

# Download shapefiles
zip_url = "https://www.cbs.nl/-/media/cbs/dossiers/nederland-regionaal/wijk-en-buurtstatistieken/wijkbuurtkaart_2021_v1.zip" 
zip_loc = joinpath(pwd(), "downloads", split(zip_url, "/")[end])
if ~isfile(zip_loc)
    download(zip_url, zip_loc)
end


# Extract shape files
r = ZipFile.Reader(zip_loc)
for f in r.files
    file_name = split(f.name, "/")[end]
    if startswith(file_name, "gemeente")
        println("Extracting: $(file_name)")
        open(joinpath(pwd(), "shapefiles", file_name), "w") do io
            write(io, read(f))
        end
    end
end

# Read shapefiles
name_shapefile = "gemeente_2021_v1.shp"
path_shapefile = joinpath(pwd(), "shapefiles", name_shapefile)
table = Shapefile.Table(path_shapefile)
df = table |> DataFrame
row_filter = df.H2O .== "NEE"
df = df[row_filter, [:geometry]]

# Add columns value1 and value2
df.value1 = rand(1:100, nrow(df))
df.value2 = rand(1:5000, nrow(df))

# Plot map
plot(df.geometry, palette = ColorSchemes.viridis, axis=false, ticks=false, size=(500, 600))

尝试

plot(df.geometry, fill = palette(:viridis), 
                  fill_z = reshape(df.value2, 1, nrow(df)), 
                  axis=false,
                  ticks=false,
                  size=(500, 600))