antvis/G2

如何实现自定义坐标label为不同的颜色 #3401

atdow posted onGitHub

  • I have searched the issues of this repository and believe that this is not a duplicate.

What problem does this feature solve?

同一个图表的同一个坐标轴,但是他们label可以有不同的颜色 如下图所示: 0fefa7a88ca3896420acf6b0a197fc4

What does the proposed API look like?

no

<!-- generated by antv-issue-helper. DO NOT REMOVE -->


使用回调的方式来设置 label.style 属性。

chart.axis('x-field', {
  label: {
    style:  (item: any, index: number, items: any[]) => ShapeAttrs;
  }
})
posted by hustcc over 3 years ago

“ShapeAttrs”是什么意思?这个code直接copy不可行。ShapeAttrs代表什么?能举个例子吗?比如是不是

                position: 'spider',
                offset: 40,
                text: 'name',
                style: (item, index, items) => { return { color: item.name } },
            })

这个例子我试过了,也行不通。

还有,如果要把connectorStroke也换成跟各自的Mark相同的颜色(这个例子里按照"name"分配颜色),可能吗?我在各个documentation里怎么找都没找到。。。

posted by mxye over 1 year ago

ShapeAttrs 是指原生的 canvas/svg 属性配置,参考 https://g.antv.antgroup.com/api/css/inheritance 这个文档最下面的表格。

(item: any, index: number, items: any[]) => ({ fill: 'red' });
posted by hustcc over 1 year ago

我还是不明白。{ fill: 'red' }结果不都成了红色吗?我的目的跟原作者的有些不同,不是基于axis的label,而是Mark的label,想要各个label和连线都是各自Mark的颜色。比如一张图里有一个蓝色interval,一个红色interval,一个绿色interval,要求蓝色interval配蓝色label和connector,绿色的配绿色的,红色的配红色的。用代码怎样表达“各自Mark的颜色”呢?

而且,我在label里尝试了下,

            chart
            .interval()
            .label({
                position: 'spider',
                offset: 40,
                text: 'name',
                connector: true,
                style: (item, index, items) => ({ fill: 'red' })
            })

添加style: (item, index, items) => ({ fill: 'red' })后,没看到图表哪里变红啊。多谢你的耐心!

posted by mxye over 1 year ago

我还是不明白。{ fill: 'red' }结果不都成了红色吗?我的目的跟原作者的有些不同,不是基于axis的label,而是Mark的label,想要各个label和连线都是各自Mark的颜色。比如一张图里有一个蓝色interval,一个红色interval,一个绿色interval,要求蓝色interval配蓝色label和connector,绿色的配绿色的,红色的配红色的。用代码怎样表达“各自Mark的颜色”呢?

而且,我在label里尝试了下,

            chart
            .interval()
            .label({
                position: 'spider',
                offset: 40,
                text: 'name',
                connector: true,
                style: (item, index, items) => ({ fill: 'red' })
            })

添加style: (item, index, items) => ({ fill: 'red' })后,没看到图表哪里变红啊。多谢你的耐心!

请问你找到label对应mark的方法了吗?

posted by kl258521 over 1 year ago

没有!你要是找到了,告诉我一声

posted by mxye about 1 year ago

没有!你要是找到了,告诉我一声

使用的啥版本?

posted by hustcc about 1 year ago

没有!你要是找到了,告诉我一声

使用的啥版本?

"@antv/g2": "^5.1.20"。我现在能够手动设定connectorStroke的颜色,比如都设定为“#222”,但是仍然不知道怎样让它变成各自mark的颜色

posted by mxye 11 months ago

() => '#222'

使用回调即可。

posted by hustcc 11 months ago

嗯,我说的是我“能够”设定为#222。但是我不能够设定为各自mark的颜色,应该怎么设定?

比如以下例子,手动设定connectorStroke的颜色,均成为灰色没问题。但是各个rect本身的颜色是由数据的“event”决定的,connectorStroke怎样才能和rect的颜色相符?同样,label的文本(text)怎样才能和rect的颜色相符?

userView
.rect()
    .transform([{ type: 'stackY' }])
    .encode('x', 'range')
    .encode('y', 'durationRange')
    .encode('color', 'event')
    .label({
        position: 'outside',
        offset: 40,
        text: data => formatLongText(data.event),
        fill: isDarkMode ? '#ddd' : '#222',
        connector: true,
        connectorStroke: isDarkMode ? '#ccc' : '#222',
        fontSize: 16,
        transform: [
            {
                type: 'overlapDodgeY',
            },
        ],
    })
posted by mxye 11 months ago

Fund this Issue

$0.00
Funded

Pull requests