提交 b685ee67 编写于 作者: S sushuang

tweak default label.

上级 0585ee9a
......@@ -366,19 +366,17 @@ function makeRenderItem(customSeries, data, ecModel, api) {
var opacity = data.getItemVisual(dataIndexInside, 'opacity');
opacity != null && (itemStyle.opacity = opacity);
if (!data.getDimensionBrief('noDefaultLabel')) {
graphicUtil.setTextStyle(itemStyle, currLabelNormalModel, null, {
autoColor: currVisualColor,
isRectText: true
});
graphicUtil.setTextStyle(itemStyle, currLabelNormalModel, null, {
autoColor: currVisualColor,
isRectText: true
});
itemStyle.text = currLabelNormalModel.getShallow('show')
? zrUtil.retrieve2(
customSeries.getFormattedLabel(dataIndexInside, 'normal'),
getDefaultLabel(data, dataIndexInside)
)
: null;
}
itemStyle.text = currLabelNormalModel.getShallow('show')
? zrUtil.retrieve2(
customSeries.getFormattedLabel(dataIndexInside, 'normal'),
getDefaultLabel(data, dataIndexInside)
)
: null;
extra && zrUtil.extend(itemStyle, extra);
return itemStyle;
......
import * as graphic from '../../util/graphic';
import * as zrUtil from 'zrender/src/core/util';
import ChartView from '../../view/Chart';
import {getDefaultLabel} from '../helper/labelHelper';
/**
* Piece of pie including Sector, Label, LabelLine
......@@ -133,7 +134,7 @@ funnelPieceProto._updateLabel = function (data, idx) {
{
labelFetcher: data.hostModel,
labelDataIndex: idx,
defaultText: data.getName(idx),
defaultText: getDefaultLabel(data, idx, true),
autoColor: visualColor,
useInsideStyle: !!labelLayout.inside
},
......
......@@ -296,23 +296,21 @@ lineProto._updateCommonStl = function (lineData, idx, seriesScope) {
var label = this.childOfName('label');
var defaultLabelColor;
var defaultText;
var normalText;
var emphasisText;
if (showLabel || hoverShowLabel) {
var rawVal = seriesModel.getRawValue(idx);
defaultText = rawVal == null
? defaultText = lineData.getName(idx)
: isFinite(rawVal)
? round(rawVal)
: rawVal;
defaultLabelColor = visualColor || '#000';
normalText = zrUtil.retrieve2(
seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType),
defaultText
);
normalText = seriesModel.getFormattedLabel(idx, 'normal', lineData.dataType);
if (normalText == null) {
var rawVal = seriesModel.getRawValue(idx);
normalText = rawVal == null
? lineData.getName(idx)
: isFinite(rawVal)
? round(rawVal)
: rawVal;
}
emphasisText = zrUtil.retrieve2(
seriesModel.getFormattedLabel(idx, 'emphasis', lineData.dataType),
normalText
......
......@@ -260,17 +260,20 @@ symbolProto._updateCommon = function (data, idx, symbolSize, seriesScope) {
var useNameLabel = seriesScope && seriesScope.useNameLabel;
if (useNameLabel || !data.getDimensionBrief('noDefaultLabel')) {
graphic.setLabelStyle(
elStyle, hoverItemStyle, labelModel, hoverLabelModel,
{
labelFetcher: seriesModel,
labelDataIndex: idx,
defaultText: useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx),
isRectText: true,
autoColor: color
}
);
graphic.setLabelStyle(
elStyle, hoverItemStyle, labelModel, hoverLabelModel,
{
labelFetcher: seriesModel,
labelDataIndex: idx,
defaultText: getLabelDefaultText,
isRectText: true,
autoColor: color
}
);
// Do not execute util needed.
function getLabelDefaultText(idx, opt) {
return useNameLabel ? data.getName(idx) : getDefaultLabel(data, idx);
}
symbolPath.off('mouseover')
......
......@@ -2,7 +2,7 @@ import * as zrUtil from 'zrender/src/core/util';
import List from '../../data/List';
import createDimensions from '../../data/helper/createDimensions';
import {SOURCE_FORMAT_ORIGINAL} from '../../data/helper/sourceHelper';
import {getValueTypeByAxis} from '../../data/helper/dimensionHelper';
import {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper';
import {getDataItemValue} from '../../util/model';
import CoordinateSystem from '../../CoordinateSystem';
import {getCoordSysDefineBySeries} from '../../model/referHelper';
......@@ -25,7 +25,7 @@ function createListFromArray(source, seriesModel) {
var axisModel = coordSysDefine.axisMap.get(dim);
if (axisModel) {
var axisType = axisModel.get('type');
dimInfo.type = getValueTypeByAxis(axisType);
dimInfo.type = getDimensionTypeByAxis(axisType);
dimInfo.stackable = isStackable(axisType);
}
return dimInfo;
......
import {SOURCE_FORMAT_ORIGINAL} from '../../data/helper/sourceHelper';
// Get concrete dim.
function getLabelValueDim(data) {
var labelDim = data.mapDimension('label');
return labelDim
? labelDim
// Only if the source is own to a series, we can use the last.
// If the source is from dataset, it probably be shared by
// different series.
: data.getProvider().getSource().sourceFormat === SOURCE_FORMAT_ORIGINAL
? data.getDimensionBrief('lastValueType')
: null;
}
/**
* @param {module:echarts/data/List} data
* @param {number} dataIndex
* @return {string} label string. Not null/undefined
*/
export function getDefaultLabel(data, dataIndex) {
var val = data.get(getLabelValueDim(data), dataIndex);
return (val == null || isNaN(val)) ? '' : val;
}
export function getDefaultLabel(data, dataIndex, orName) {
var labelDims = data.mapDimension('defaultedLabel', true);
var len = labelDims.length;
export function getLabelFromName(data, dataIndex) {
var labelDim = data.mapDimension('label');
return labelDim
? data.get(labelDim, dataIndex)
: data.getName(dataIndex);
// Simple optimization (in lots of cases, label dims length is 1)
if (len === 1) {
var val = data.get(labelDims[0], dataIndex, true);
return formatLabelValue(val);
}
else if (len) {
var vals = [];
for (var i = 0; i < labelDims.length; i++) {
var val = data.get(labelDims[i], dataIndex, true);
vals.push(formatLabelValue(val));
}
return vals.join(', ');
}
else if (orName) {
return data.getName(dataIndex);
}
}
function formatLabelValue(val) {
return (val == null || isNaN(val)) ? '' : val;
}
import * as zrUtil from 'zrender/src/core/util';
import * as graphic from '../../util/graphic';
import ChartView from '../../view/Chart';
import {getLabelFromName} from '../helper/labelHelper';
import {getDefaultLabel} from '../helper/labelHelper';
/**
* @param {module:echarts/model/Series} seriesModel
......@@ -235,7 +235,7 @@ piePieceProto._updateLabel = function (data, idx) {
{
labelFetcher: data.hostModel,
labelDataIndex: idx,
defaultText: getLabelFromName(data, idx),
defaultText: getDefaultLabel(data, idx, true),
autoColor: visualColor,
useInsideStyle: !!labelLayout.inside
},
......
......@@ -5,7 +5,7 @@
import SeriesModel from '../../model/Series';
import createDimensions from '../../data/helper/createDimensions';
import {getValueTypeByAxis} from '../../data/helper/dimensionHelper';
import {getDimensionTypeByAxis} from '../../data/helper/dimensionHelper';
import List from '../../data/List';
import * as zrUtil from 'zrender/src/core/util';
import {encodeHTML} from '../../util/format';
......@@ -142,7 +142,7 @@ var ThemeRiverSeries = SeriesModel.extend({
sysDimensions: [
{
name: 'single',
type: getValueTypeByAxis(axisType)
type: getDimensionTypeByAxis(axisType)
},
{
name: 'value',
......
......@@ -313,14 +313,6 @@ listProto.mapDimension = function (coordDim, idx) {
: null;
};
/**
* @type {string} Specially, can also be 'lastValueType', 'noDefaultLabel'
* @return {*}
*/
listProto.getDimensionBrief = function (type) {
return this._dimensionsSummary.brief[type];
};
/**
* Initialize from data
* @param {Array.<Object|number|Array>} data source or data or data provider.
......
......@@ -36,6 +36,7 @@ import {OTHER_DIMENSIONS} from './dimensionHelper';
* @return {Array.<Object>} [{
* name: string mandatory,
* coordDim: string mandatory,
* isSysCoord: boolean True if the coord is from sys dimension.
* coordDimIndex: number mandatory,
* type: string optional,
* tooltipName: string optional,
......@@ -135,6 +136,7 @@ function completeDimensions(sysDims, source, opt) {
if (resultItem.name == null && sysDimItemDimsDef) {
resultItem.name = resultItem.tooltipName = sysDimItemDimsDef[coordDimIndex];
}
resultItem.isSysCoord = true;
// FIXME refactor, currently only used in case: {otherDims: {tooltip: false}}
sysDimItemOtherDims && defaults(resultItem.otherDims, sysDimItemOtherDims);
});
......
......@@ -7,8 +7,9 @@ export var OTHER_DIMENSIONS = createHashMap([
export function summarizeDimensions(data) {
var summary = {};
var encode = summary.encode = {};
var defaultedLabel = [];
each(data.dimensions, function (dimName) {
var dimItem = data.getDimensionInfo(dimName);
......@@ -21,7 +22,11 @@ export function summarizeDimensions(data) {
if (!encode.hasOwnProperty(coordDim)) {
coordDimArr = encode[coordDim] = [];
}
coordDimArr[dimItem.coordDimIndex] = dimItem.name;
coordDimArr[dimItem.coordDimIndex] = dimName;
if (dimItem.isSysCoord && mayLabelDimType(dimItem.type)) {
defaultedLabel.push(dimName);
}
}
OTHER_DIMENSIONS.each(function (v, otherDim) {
......@@ -37,17 +42,17 @@ export function summarizeDimensions(data) {
});
});
var labelEncode = summary.encode.label;
var briefLastValueType = findTheLastValueDimensions(data);
summary.brief = {
lastValueType: briefLastValueType,
noDefaultLabel: !(labelEncode && labelEncode[0]) && briefLastValueType == null
};
var encodeLabel = encode.label;
if (encodeLabel && encodeLabel.length) {
defaultedLabel = encode.label.slice();
}
encode.defaultedLabel = defaultedLabel;
return summary;
}
export function getValueTypeByAxis(axisType) {
export function getDimensionTypeByAxis(axisType) {
return axisType === 'category'
? 'ordinal'
: axisType === 'time'
......@@ -55,15 +60,21 @@ export function getValueTypeByAxis(axisType) {
: 'float';
}
function findTheLastValueDimensions(data) {
// Get last value dim
var dimensions = data.dimensions.slice();
var valueType;
var valueDim;
while (dimensions.length && (
valueDim = dimensions.pop(),
valueType = data.getDimensionInfo(valueDim).type,
valueType === 'ordinal' || valueType === 'time'
)) {} // jshint ignore:line
return valueDim;
function mayLabelDimType(dimType) {
// In most cases, ordinal and time do not suitable for label.
// Ordinal info can be displayed on axis. Time is too long.
return !(dimType === 'ordinal' || dimType === 'time');
}
// function findTheLastDimMayLabel(data) {
// // Get last value dim
// var dimensions = data.dimensions.slice();
// var valueType;
// var valueDim;
// while (dimensions.length && (
// valueDim = dimensions.pop(),
// valueType = data.getDimensionInfo(valueDim).type,
// valueType === 'ordinal' || valueType === 'time'
// )) {} // jshint ignore:line
// return valueDim;
// }
......@@ -457,7 +457,7 @@ export function setHoverStyle(el, hoverStyle, opt) {
* @param {module:echarts/model/Model} normalModel
* @param {module:echarts/model/Model} emphasisModel
* @param {Object} opt Check `opt` of `setTextStyleCommon` to find other props.
* @param {Object} [opt.defaultText]
* @param {string|Function} [opt.defaultText]
* @param {module:echarts/model/Model} [opt.labelFetcher] Fetch text by
* `opt.labelFetcher.getFormattedLabel(opt.labelDataIndex, 'normal'/'emphasis', null, opt.labelDimIndex)`
* @param {module:echarts/model/Model} [opt.labelDataIndex] Fetch text by
......@@ -487,14 +487,15 @@ export function setLabelStyle(
// Consider performance, only fetch label when necessary.
// If `normal.show` is `false` and `emphasis.show` is `true` and `emphasis.formatter` is not set,
// label should be displayed, where text is fetched by `normal.formatter` or `opt.defaultText`.
var baseText = (showNormal || showEmphasis)
? zrUtil.retrieve2(
labelFetcher
? labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex)
: null,
opt.defaultText
)
: null;
var baseText;
if (showNormal || showEmphasis) {
if (labelFetcher) {
baseText = labelFetcher.getFormattedLabel(labelDataIndex, 'normal', null, labelDimIndex);
}
if (baseText == null) {
baseText = zrUtil.isFunction(opt.defaultText) ? opt.defaultText(labelDataIndex, opt) : opt.defaultText;
}
}
var normalStyleText = showNormal ? baseText : null;
var emphasisStyleText = showEmphasis
? zrUtil.retrieve2(
......
......@@ -164,7 +164,7 @@ export var dataFormatMixin = {
* @param {string} [dataType]
* @param {number} [dimIndex]
* @param {string} [labelProp='label']
* @return {string}
* @return {string} If not formatter, return null/undefined
*/
getFormattedLabel: function (dataIndex, status, dataType, dimIndex, labelProp) {
status = status || 'normal';
......
......@@ -95,8 +95,8 @@
{
name: names[1],
type: 'scatter',
label: {
emphasis: {
emphasis: {
label: {
show: true,
position: 'top',
formatter: function (params) {
......@@ -108,10 +108,8 @@
return val[2] * 40;
},
itemStyle: {
normal: {
color: function (params) {
return 'rgba(30, 70, 50, ' + params.value[2] + ')';
}
color: function (params) {
return 'rgba(30, 70, 50, ' + params.value[2] + ')';
}
},
data: data2
......@@ -120,9 +118,7 @@
name: names[2],
type: 'scatter',
label: {
normal: {
show: true
}
show: true
},
symbolSize: function (val) {
return val[2] * 40;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册