NetLogo中如何绘制海龟沿pxcor轴分布的统计直方图
NetLogo 自定义分布直方图实现
原代码的问题根源
你写的histogram [count guys-on patch pxcor pycor] of guys逻辑完全错位:
- 语句执行时会逐个遍历每只guy个体,计算该个体所在patch上的guys总数,再把所有个体算出的计数值作为样本绘制直方图,本质是在统计「单只海龟所在patch的同伴数量分布」,既没有按pxcor列做全局聚合,也根本没有实现pycor均值的计算逻辑。
正确实现方式
你的最终统计要求明确为:
- 直方图x轴严格对齐世界边界,范围从
min-pxcor到max-pxcor,每个柱子对应一个整数pxcor列 - 每个柱子的高度,是当前pxcor列下所有guys的pycor坐标平均值,而非列上的海龟总数
- 没有海龟的空列对应柱子高度为0,避免统计报错
代码配置
- 绘图初始化(写在plots的Setup模块)
固定x轴范围,避免自动缩放导致轴边界不符合要求:set-plot-x-range min-pxcor (max-pxcor + 1) clear-plot - 更新绘制逻辑(写在画笔的Update模块)
逐列聚合计算对应的pycor均值,绘制宽度为1的柱子,刚好占满每个pxcor列的范围:foreach (range min-pxcor (max-pxcor + 1)) [ current-x -> let column-turtles guys with [xcor = current-x] let column-height ifelse-value any? column-turtles [ mean [ycor] of column-turtles ] [ 0 ] create-temporary-bar current-x column-height 1 ]
快速调整技巧
如果后续需要切回最初的「统计每个pxcor列上海龟总数」的需求,只需要把上面column-height的计算逻辑替换为count column-turtles即可,不需要改动整体绘图框架。
内容的提问来源于stack exchange,提问作者nicetomeetu
相关产品推荐
相关产品推荐

