Julia 1.7.3中Plots.plot绘折线图出现异常对角线,是否为Bug?
问题分析与解决
你遇到的橙色异常线不是Bug,是代码逻辑问题——outerjoin之后的wealth列没有按数值排序,折线图默认按数据行的顺序连接点,当x轴(wealth)数值乱序时,就会在首尾或不连续的点之间产生跨图的连线。
问题根源
你的两个原始数据集Em_dat和Unem_dat的wealth列可能包含不同的数值范围或非重叠值,outerjoin会合并所有wealth值,但不会自动按数值排序。当直接用这个乱序的x轴数据画折线图时,Plots会严格按照行的顺序把点连起来,最终出现那条奇怪的对角线。
修正代码
在将DataFrame转为矩阵之前,新增排序步骤即可解决:
Em_mu = [a_grid.+Es[1] res.mu[:,1]] Unem_mu = [a_grid.+Es[2] res.mu[:,2]] Em_dat = DataFrame(wealth = Em_mu[:,1], density1 = Em_mu[:,2]) Unem_dat = DataFrame(wealth = Unem_mu[:,1], density2 = Unem_mu[:,2]) wealth_mat = outerjoin(Em_dat, Unem_dat, on=:wealth) replace!(wealth_mat.density1, missing => 0) replace!(wealth_mat.density2, missing => 0) disallowmissing!(wealth_mat) # 按wealth列从小到大排序,确保x轴数据有序 sort!(wealth_mat, :wealth) wealth_mat = Matrix(wealth_mat) Plots.plot(wealth_mat[:,1], wealth_mat[:,2:3], title = "Distribution")
补充说明
如果原始a_grid本身是有序的,Es[1]和Es[2]的差异可能导致两个wealth序列的范围不重叠,outerjoin合并后就会打乱顺序。排序后x轴数据按递增排列,折线图会正常按x轴顺序绘制,不会再出现跨图连线。
内容的提问来源于stack exchange,提问作者Young
相关产品推荐
相关产品推荐

