辅助线的label如何自动换行?

辅助线的label里面的文字如果太长的话可以自动换行吗?
image.png

阅读 3.3k
3 个回答

解决方案 Solution

你可以通过在markLine.label.text中设置数组来实现换行的效果。

代码示例 Code Example

代码参考 Code Example

const spec = {
  type: 'scatter',
  padding: [12, 20, 12, 12],
  xField: 'x',
  yField: 'y',
  sizeField: 'z',
  size: {
    type: 'linear',
    range: [20, 80]
  },
  axes: [
    { orient: 'bottom', type: 'linear', min: 60, max: 95 },
    { orient: 'left', type: 'linear', min: 0, max: 200 }
  ],
  point: {
    style: {
      fillOpacity: 0.25,
      lineWidth: 1,
      stroke: '#6690F2',
      fill: '#6690F2'
    }
  },
  label: {
    visible: true,
    position: 'center',
    overlap: {
      avoidBaseMark: false
    },
    style: {
      stroke: '#fff',
      lineWidth: 1
    }
  },
  markLine: [
    {
      x: 90,
      label: {
        visible: true,
        position: 'end',
        text: ['Safe fat intake',  '65g/day'],
        style: {
          textAlign: 'left',
          textBaseline: 'top',
          fill: '#000',
          dx: 10
        },
        labelBackground: {
          visible: false
        }
      },
      line: {
        style: {
          stroke: '#000',
          lineDash: [0]
        }
      }
    },
    {
      y: 50,
      label: {
        visible: true,
        position: 'end',
        text: ['Safe sugar intake', '50g/day'],
        style: {
          textAlign: 'right',
          textBaseline: 'bottom',
          fill: '#000'
        },
        labelBackground: {
          visible: false
        }
      },
      line: {
        style: {
          stroke: '#000',
          lineDash: [0]
        }
      }
    }
  ],
  tooltip: {
    mark: {
      title: {
        value: datum => datum.country
      }
    }
  },
  data: {
    id: 'data',
    values: [
      { x: 95, y: 95, z: 13.8, name: 'BE', country: 'Belgium' },
      { x: 86.5, y: 102.9, z: 14.7, name: 'DE', country: 'Germany' },
      { x: 80.8, y: 91.5, z: 15.8, name: 'FI', country: 'Finland' },
      { x: 80.4, y: 102.5, z: 12, name: 'NL', country: 'Netherlands' },
      { x: 80.3, y: 86.1, z: 11.8, name: 'SE', country: 'Sweden' },
      { x: 78.4, y: 70.1, z: 16.6, name: 'ES', country: 'Spain' },
      { x: 74.2, y: 68.5, z: 14.5, name: 'FR', country: 'France' },
      { x: 73.5, y: 83.1, z: 10, name: 'NO', country: 'Norway' },
      { x: 71, y: 93.2, z: 24.7, name: 'UK', country: 'United Kingdom' },
      { x: 69.2, y: 57.6, z: 10.4, name: 'IT', country: 'Italy' },
      { x: 68.6, y: 20, z: 16, name: 'RU', country: 'Russia' },
      { x: 65.5, y: 126.4, z: 35.3, name: 'US', country: 'United States' },
      { x: 65.4, y: 50.8, z: 28.5, name: 'HU', country: 'Hungary' },
      { x: 63.4, y: 51.8, z: 15.4, name: 'PT', country: 'Portugal' },
      { x: 64, y: 82.9, z: 31.3, name: 'NZ', country: 'New Zealand' }
    ]
  }
};

结果展示 Results

在线效果参考:https://codesandbox.io/s/markline-label-line-break-fhnwc8

image.png

相关文档 Related Documentation

标注demo:https://www.visactor.io/vchart/demo/marker/mark-line-basic?ke...

标注教程:https://www.visactor.io/vchart/guide/tutorial_docs/Chart_Conc...

相关api:https://www.visactor.io/vchart/option/barChart#markLine.label...

github:https://github.com/VisActor/VChart

使用formatter参数写一个自动换行的方法就可以实现

测量准备显示文本的字符串长度,大于换行长度,进行字符串切分,然后拼接 \n 换行符号:

function getTextWidth(text, font) {
    // canvas 可以自己做个缓存,复用
    const canvas = document.createElement("canvas");
    const context = canvas.getContext("2d");
    // 配置字体样式巴拉巴拉...
    context.font = font;
    // 不需要在画布上输出就可以计算文字的宽度
    const metrics = context.measureText(text);
    return metrics.width;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题