Ok, vì vậy tôi đã tự làm. Đã cho tôi một thời gian để hiểu làm thế nào flot hoạt động nội bộ, nhưng cuối cùng tôi tìm thấy một phần mà tôi cần phải thay đổi. Trên jquery.flot.pie.js, hãy thay đổi hàm drawSlice (dòng 406 trên Flot 0.7) thành:
function drawSlice(angle, color, fill)
{
if (angle<=0)
return;
if (fill) {
if (typeof color === "object") {
var grad= ctx.createRadialGradient(0, 0, 0, 0, 0, radius);
var i;
var numColors= color.colors.length;
for (i=0; i< numColors ; i++) {
grad.addColorStop(i/(numColors-1), color.colors[i]);
}
ctx.fillStyle = grad;
} else {
ctx.fillStyle = color;
}
ctx.fillStyle = color;
} else {
ctx.strokeStyle = color;
ctx.lineJoin = 'round';
}
không xóa phần còn lại của mã sau nếu.
Và cũng giống như ma thuật bây giờ bạn có thể xác định hàng loạt của bạn với màu sắc radial gradient:
[{
label: i,
data: Math.random() *1000,
color: { colors: [ "rgb(190,110,110)", "rgb(140, 70, 70)", "rgb(110, 50, 50)", "rgb(60, 10, 10)" ] }
}]
Tôi sẽ cố gắng để tạo ra một biểu đồ mát mẻ sau đó tôi sẽ chụp màn hình nó và trả lời ở đây.
EDIT: Tại đây bạn đi:
var d1= [];
d1.push({
label: "Crítico",
data: Math.random() *1000,
color: { colors: [ "rgb(190,110,110)", "rgb(140, 70, 70)", "rgb(110, 50, 50)", "rgb(60, 10, 10)" ] }
});
d1.push({
label: "Médio",
data: Math.random() *1000,
color: { colors: [ "rgb(110,110,190)", "rgb(70, 70, 140)", "rgb(50, 50, 110)", "rgb(10, 10, 60)" ] }
})
this.plot= $.plot($div, d1);
Đó là tốt hơn rất nhiều so với sử dụng màu sắc rắn, nhưng nó có thể trở nên tốt hơn rất nhiều, tôi chỉ xấu ở màu sắc chọn. Bây giờ tôi tìm thấy một vấn đề nhỏ, truyền thuyết không làm việc với những thay đổi của tôi, không có màu sắc sẽ được hiển thị trên chúng. Tôi không sẵn sàng sửa lỗi vì chức năng đó có mặt trên tập tin Flot lõi (lớn hơn và phức tạp hơn nhiều so với plugin của chiếc bánh) và tôi không có nhiều thời gian rảnh để gây rối với điều đó.
Hey người đàn ông rất cool. Tôi chấp nhận câu trả lời của bạn, nó có thể ít hơn rất nhiều hacky hơn tôi. Nói cho tôi biết, nó có hiệu quả nghiêng không? – Hoffmann
@Hoffmann, cảm ơn vì đã chấp nhận câu trả lời của tôi. Tôi đã cập nhật câu trả lời của tôi để bao gồm một ví dụ với một biểu đồ hình tròn nghiêng, và nó có vẻ làm việc, ít nhất là theo mong đợi của tôi. Nó cũng làm việc với một gradient tuyến tính, nhưng nó trông xấu, vì vậy tôi đã không bao gồm một ví dụ về nó. –
Hey @mtr, có lỗi khi sử dụng gradient tuyến tính. Họ chỉ bao gồm một nửa biểu đồ hình tròn. Để sửa chữa nó trên chức năng drawSlice thay đổi thành: gradient = ctx.createLinearGradient (0, -bottom/2, 0, bottom/2) lưu ý rằng điều này không sử dụng thuộc tính hàng đầu nữa nên tôi không chắc liệu nó có sửa được không 100% trên các biểu đồ không nằm ở trung tâm của ô (có thể thêm nửa đầu cho cả hai tham số khác 0). Dù sao gradient cũng được thiết lập để bắt đầu từ dưới cùng của khu vực cốt truyện không phải là sự khởi đầu của chiếc bánh làm cho nó xấu trên bảng xếp hạng trong đó chiếc bánh không bao gồm khu vực âm mưu đầy đủ. Radial gradient là tốt. – Hoffmann