如何使用 Julia 和 Plots.jl 在专题图中使用连续色标
How to use a continuous color scale in a thematic map using Julia and Plots.jl
我想使用 Plots.jl
绘制专题图(等值线图)。我使用的 DataFrame df
有 3 列:geometry
、value1
和 value2
。 geometry
列的元素类型为 Polygon
(使用 Shapefile
包读取数据)。 value1
和 value2
列的元素类型为 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))
我想使用 Plots.jl
绘制专题图(等值线图)。我使用的 DataFrame df
有 3 列:geometry
、value1
和 value2
。 geometry
列的元素类型为 Polygon
(使用 Shapefile
包读取数据)。 value1
和 value2
列的元素类型为 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))