You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用MediaWiki与SRF生成含零值计数的折线图

解决Semantic MediaWiki折线图显示全年份(含0产量)的方案

默认的jqplotchart+distribution参数只会统计存在数据的年份,要补全1990-2000的所有年份并显示0产量,核心思路是主动遍历目标年份范围,对每个年份单独统计产量,再将结果整合为图表所需格式。以下是三种可行方案:


方案一:数组遍历+批量查询(通用兼容版)

通过#set定义年份范围,结合#arraymap遍历每个年份并查询对应产量,最后生成完整的图表数据:

{{#set:
 |Years=1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000
}}

{{#arraymap: {{#show: {{PAGENAME}} |?Years}} |, | $year |
  {{#ask:
    [[Color::Red]]
    [[Year::{{$year}}]]
    |format=count
  }} |, | $count | {{$year}}:{{$count}} |; | $pair | [{{$pair}}] |, }}

{{#jqplotchart:
 |data=[上面生成的数组]
 |charttype=line
 |xaxis=1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000
 |ylabel=产量
 |title=1990-2000年红色物品产量
}}

说明

  1. 先用#set将目标年份范围存储到当前页面的Years属性
  2. #arraymap遍历每个年份,调用#ask的count格式获取对应年份的红色物品数量
  3. 将年份与数量拼接为年份:数量的格式,整理成图表所需的数组结构
  4. 手动指定xaxis参数为完整年份列表,确保无数据年份不被省略

方案二:聚合函数+JSON关联(SMW新版本适用)

如果你的SMW版本支持#aggregate函数,可以先批量统计有数据年份的产量,再关联完整年份范围补全0值:

{{#aggregate:
 |query=[[Color::Red]]
 |group by=Year
 |count=?Year
 |format=json
 |limit=100
 |store=year_counts
}}

{{#arraymap: {{#range:1990|2000}} |, | $year |
  {{#jsonpath: {{#show: {{PAGENAME}} |?year_counts}} | $.[?(@.key == "{{$year}}")].count | default=0 }} |, | $count | {{$year}}:{{$count}} |; | $pair | [{{$pair}}] |, }}

{{#jqplotchart:
 |data=[上面生成的数组]
 |charttype=line
 |xaxis={{#range:1990|2000}}
 |ylabel=产量
 |title=1990-2000年红色物品产量
}}

说明

  1. #aggregate统计所有有数据年份的产量,结果以JSON格式存储到year_counts属性
  2. #range生成1990-2000的完整年份数组
  3. #jsonpath从存储的JSON中提取对应年份的产量,无数据时默认返回0
  4. 最终生成包含全年份数据的折线图

方案三:模板辅助(直观易维护版)

创建一个可复用的产量统计模板,手动列出所有年份并调用模板查询:

第一步:创建模板Year产量统计

{{#ask:
  [[Color::Red]]
  [[Year::{{{year}}}]]
  |format=count
}}

第二步:主页面调用生成图表

{{#jqplotchart:
 |data=[
  [1990:{{Year产量统计|year=1990}}],
  [1991:{{Year产量统计|year=1991}}],
  [1992:{{Year产量统计|year=1992}}],
  [1993:{{Year产量统计|year=1993}}],
  [1994:{{Year产量统计|year=1994}}],
  [1995:{{Year产量统计|year=1995}}],
  [1996:{{Year产量统计|year=1996}}],
  [1997:{{Year产量统计|year=1997}}],
  [1998:{{Year产量统计|year=1998}}],
  [1999:{{Year产量统计|year=1999}}],
  [2000:{{Year产量统计|year=2000}}]
 ]
 |charttype=line
 |xaxis=1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000
 |ylabel=产量
 |title=1990-2000年红色物品产量
}}

说明

  • 模板封装了单年份的产量查询逻辑,无数据时自动返回0
  • 手动列出所有年份并传入模板,确保每个年份都有对应的产量数据
  • 配置xaxis为完整年份列表,保证X轴显示所有目标年份

注意事项

  • 若使用#range或#aggregate,需确保你的SMW版本支持这些函数,旧版本可能需要升级
  • 所有方案的核心都是主动覆盖1990-2000的全部年份,而非依赖查询自动返回的有数据条目,这是补全0产量的关键

内容的提问来源于stack exchange,提问作者Nahdi Lazar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:20:16