caronchen / obsidian-chartsview-plugin

Data visualization solution in Obsidian, support plots and graphs.
MIT License
221 stars 11 forks source link

能支持下自定义函数吗? #26

Closed sherjf closed 3 years ago

sherjf commented 3 years ago

实现下图Legend中的itemValue,需要用到自定义函数功能,但目前不支持。

截屏2021-10-01 22 22 03
caronchen commented 3 years ago

我抽空看一下

sherjf commented 3 years ago

Facet图表的eachView函数内,可以支持数组的迭代方法,如.map().filter()等,但其它图表不行,希望能一并修复下。

caronchen commented 3 years ago

给我个例子吧

sherjf commented 3 years ago

类似这个例子,可以使用自定义外部函数。 已知问题:

  1. 常规图表无法使用自定义函数。
  2. Facet图表中eachView内无法设置legend,需由上级options设置。
  3. Facet图表的eachView内可以使用自定义函数,上级option内无法使用自定义函数、function formatter()函数,会出错。

建议: 能否升级下,让所有图表的options类似eachView,支持函数,如function options(params),这样插件的灵活性及拓展性将大大增强。

options:
...
legend:
   itemValue: 
       formatter: function formatter(text, item) { return item.name } 
eachView: |
    function eachView(view, f){
      function ArrayStatistic(array,key) {
        var obj = array.map((item)=> {   
          return item[key]
        }).reduce((pre,cur)=> {
          if(cur in pre) {
            pre[cur]++    
          }
          else {
          pre[cur] = 1
          }
          return pre
        },{});
    var arr = Object.keys(obj).map((i)=> {  
          return {
            name: i,
            value: obj[i],
          }
        });
        return arr
      };
caronchen commented 3 years ago

1.0.12 版本先试一下,可能跟Bug有关。

sherjf commented 3 years ago

经测试,发现eachView上级的tooltip使用formatter自定义函数不会报错了,但没有效果,即无输出,表明未完全修复Bug。 目前只有eachView函数支持对data数据的二次计算和加工。

建议

下一版本能升级使其它图表也都支持自定义函数和数据加工,而不仅限于formatter等有限的函数。

caronchen commented 3 years ago

能否使用函数需要看Ant Design Charts的文档,文档里的属性如果是支持函数的,都可以使用函数。