使用CairoMakie绘制DataFrame列密度图遇MethodError问题求助
问题分析与解决办法
问题出在你传入的Rawdata.LVEDV是Vector{Any}类型——虽然里面的元素都是整数,但CairoMakie的density函数依赖的核密度估计(kde)只认数值类型的向量(比如Int64或Float64数组),Julia的类型系统没法自动把Any类型当成数值来处理,所以才报了找不到匹配方法的错。
解决步骤
1. 先把列转成数值类型
用convert把LVEDV列转换成整数或浮点类型:
using DataFrames # 转成整数类型 Rawdata.LVEDV = convert(Vector{Int64}, Rawdata.LVEDV) # 要是后续需要浮点运算,也可以转成Float64 # Rawdata.LVEDV = convert(Vector{Float64}, Rawdata.LVEDV)
如果列里有缺失值(实际场景经常遇到),就改成允许缺失的数值类型:
Rawdata.LVEDV = convert(Vector{Union{Int64, Missing}}, Rawdata.LVEDV)
2. 重新绘制密度图
类型转好之后,再跑你的绘图代码就没问题了:
using CairoMakie CairoMakie.density(Rawdata.LVEDV)
额外小提示
- 加载数据的时候最好直接指定列类型,避免生成
Vector{Any}。比如用CSV.read时可以这么写:using CSV Rawdata = CSV.read("你的数据文件.csv", DataFrame, types=Dict(:LVEDV => Int64)) - 要是不确定列里有没有非数值元素,可以先查一查:
# 筛选出不是整数的元素 filter(x -> !(x isa Integer), Rawdata.LVEDV)
内容的提问来源于stack exchange,提问作者Manuel
相关产品推荐
相关产品推荐

