在 ECharts 中实现长文本换行显示,同时保持正向垂直排列(从上到下阅读),可以通过以下两种高效方案实现:
方案一:使用换行符 + 旋转 90°(推荐)
xAxis: {type: 'category',data: ['这是一个非常长的文本需要换行', '另一个超长标签内容示例'],axisLabel: {rotate: 90, // 关键:逆时针旋转90度formatter: function(value) {// 自动按每3个字符换行return value.match(/.{1,3}/g).join('\n');// 或按实际宽度换行(更智能)// return value.split('').join('\n');},align: 'left',verticalAlign: 'middle',lineHeight: 16, // 行高控制padding: [0, 0, 10, 0], // 下边距增加空间rich: {// 可添加富文本样式a: { fontSize: 12 }}}
}
关键参数说明:
formatter:/.{1,3}/g:每3个字符换行(适合中文字符)split('').join('\n'):每个字符单独一行(垂直排列)
lineHeight:控制行间距(根据字体大小调整)padding:增加下方间距防止文字被截断rich:支持自定义文本样式
方案二:纯 CSS 样式方案(ECharts 5+)
xAxis: {axisLabel: {overflow: 'break', // 自动换行width: 40, // 文本块最大宽度ellipsis: '...', // 溢出显示省略号rotate: 90,align: 'left',verticalAlign: 'middle'}
}
完整示例(带效果优化)
option = {xAxis: {type: 'category',data: ['金融科技事业部', '人工智能实验室', '全球市场发展中心','云计算与大数据研究部'],axisLabel: {rotate: 90,formatter: function(value) {// 智能换行:每4字符换行const parts = [];for (let i = 0; i < value.length; i += 4) {parts.push(value.substring(i, i + 4));}return parts.join('\n');},align: 'left',verticalAlign: 'middle',lineHeight: 18,margin: 40, // 增大标签间距padding: [0, 0, 15, 0], // 下方留白rich: {a: {color: '#333',fontWeight: 'bold'}}},axisTick: {alignWithLabel: true}},yAxis: { type: 'value' },series: [{data: [120, 200, 150, 80],type: 'bar',label: { show: true }}],grid: { bottom: '25%' } // 增加底部区域防止文字溢出
};
效果优化技巧:
- 行高控制:
lineHeight应比字体大 4-6px - 防溢出:
grid: { bottom: '30%' } // 根据文本行数调整 - 长文本处理:
formatter: value => {if (value.length > 8) {return value.substring(0, 6) + '...\n' + value.substring(6);}return value.split('').join('\n'); } - 响应式适配:
window.addEventListener('resize', () => {myChart.resize();// 动态调整grid.bottomoption.grid.bottom = window.innerWidth < 600 ? '40%' : '25%';myChart.setOption(option); });
不同方案效果对比:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 字符换行 | 完美垂直排列 | 字符间距固定 | 中文短文本 |
| 智能分段 | 保持词语完整 | 需手动控制 | 专业术语 |
| CSS 自动换行 | 配置简单 | 兼容性要求高 | ECharts 5+ |
重要提示:当文本超过 8 个字符时,建议结合
formatter截断处理,或使用tooltip显示完整内容,防止布局错乱。