Přidání barev do vizuálů Power BI
Tento článek popisuje, jak přidat barvy do vlastních vizuálů a jak zpracovat datové body vizuálu, který má definované barvy.
IVisualHost
, kolekce vlastností a služeb, které pracují s hostitelem vizuálu, může definovat barvy ve vlastních vizuálech se službou colorPalette
. Ukázkový kód v tomto článku upravuje vizuál SampleBarChart. Zdrojový kód vizuálu SampleBarChart naleznete v souboru barChart.ts.
Pokud chcete začít vytvářet vizuály, přečtěte si téma Vývoj vizuálu kruhové karty Power BI.
Přidání barvy do datových bodů
Pokud chcete každý datový bod znázorňovat jinou barvou, přidejte color
proměnnou do BarChartDataPoint
rozhraní, jak je znázorněno v následujícím příkladu:
/**
* Interface for BarChart data points.
*
* @interface
* @property {number} value - Data value for point.
* @property {string} category - Corresponding category of data value.
* @property {string} color - Color corresponding to data point.
*/
interface BarChartDataPoint {
value: number;
category: string;
color: string;
};
Použití služby palety barev
Služba colorPalette
spravuje barvy použité ve vizuálu. Instance colorPalette
služby je k dispozici na serveru IVisualHost
.
Definujte paletu barev v update
metodě následujícím kódem:
constructor(options: VisualConstructorOptions) {
this.host = options.host; // host: IVisualHost
...
}
public update(options: VisualUpdateOptions) {
let colorPalette: IColorPalette = host.colorPalette;
...
}
Přiřazení barvy k datovým bodům
Dále zadejte dataPoints
. V tomto příkladu má každá z nich dataPoints
definovanou hodnotu, kategorii a vlastnost barev. dataPoints
může také obsahovat další vlastnosti.
visualTransform
Metoda SampleBarChart
je součástí modelu zobrazení pruhového grafu. visualTransform
Vzhledem k tomu, že metoda prochází všechny dataPoints
výpočty, je ideálním místem pro přiřazení barev, jako v následujícím kódu:
public update(options: VisualUpdateOptions) {
....
let viewModel: BarChartViewModel = visualTransform(options, this.host);
....
}
function visualTransform(options: VisualUpdateOptions, host: IVisualHost): BarChartViewModel {
let colorPalette: IColorPalette = host.colorPalette; // host: IVisualHost
for (let i = 0, len = Math.max(category.values.length, dataValue.values.length); i < len; i++) {
barChartDataPoints.push({
category: category.values[i],
value: dataValue.values[i],
color: colorPalette.getColor(category.values[i]).value,
});
}
}
Pak použijte data z dataPoints
d3-selectionbarSelection
uvnitř update
metody:
// This code is for d3 v5
// in d3 v5 for this case we should use merge() after enter() and apply changes on barSelectionMerged
this.barSelection = this.barContainer
.selectAll('.bar')
.data(this.barDataPoints);
const barSelectionMerged = this.barSelection
.enter()
.append('rect')
.merge(<any>this.barSelection);
barSelectionMerged.classed('bar', true);
barSelectionMerged
.attr("width", xScale.bandwidth())
.attr("height", d => height - yScale(<number>d.value))
.attr("y", d => yScale(<number>d.value))
.attr("x", d => xScale(d.category))
.style("fill", (dataPoint: BarChartDataPoint) => dataPoint.color)
.style("stroke", (dataPoint: BarChartDataPoint) => dataPoint.strokeColor)
.style("stroke-width", (dataPoint: BarChartDataPoint) => `${dataPoint.strokeWidth}px`);
this.barSelection
.exit()
.remove();