Kleuren toevoegen aan uw Power BI-visuals
In dit artikel wordt beschreven hoe u kleuren toevoegt aan uw aangepaste visuals en hoe u gegevenspunten kunt verwerken voor een visual met gedefinieerde kleuren.
IVisualHost
, de verzameling eigenschappen en services die communiceren met de visualhost, kan kleuren definiƫren in aangepaste visuals met de colorPalette
service. Met de voorbeeldcode in dit artikel wordt de visual SampleBarChart gewijzigd. Zie barChart.ts voor de broncode van de SampleBarChart-visual.
Zie Een visual met een cirkelkaart in Power BI ontwikkelen om aan de slag te gaan met het maken van visuals.
Kleur toevoegen aan gegevenspunten
Als u elk gegevenspunt in een andere kleur wilt weergeven, voegt u de color
variabele toe aan de BarChartDataPoint
interface, zoals wordt weergegeven in het volgende voorbeeld:
/**
* 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;
};
De kleurenpaletservice gebruiken
De colorPalette
service beheert de kleuren die in uw visual worden gebruikt. Er is een exemplaar van de colorPalette
service beschikbaar op IVisualHost
.
Definieer het kleurenpalet in de update
methode met de volgende code:
constructor(options: VisualConstructorOptions) {
this.host = options.host; // host: IVisualHost
...
}
public update(options: VisualUpdateOptions) {
let colorPalette: IColorPalette = host.colorPalette;
...
}
Kleur toewijzen aan gegevenspunten
Geef dataPoints
vervolgens op. In dit voorbeeld heeft elk van de functies dataPoints
een gedefinieerde waarde, categorie en kleureigenschap. dataPoints
kan ook andere eigenschappen bevatten.
visualTransform
De SampleBarChart
methode maakt deel uit van het weergavemodel Staafdiagram. Omdat de visualTransform
methode alle dataPoints
berekeningen doorloopt, is het de ideale plek om kleuren toe te wijzen, zoals in de volgende code:
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,
});
}
}
Pas vervolgens de gegevens toe van dataPoints
de d3-selectiebarSelection
in de update
methode:
// 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();