2012-05-15 45 views
20

Với biểu đồ thanh Google Biểu đồ, có thể thay đổi màu của một thanh. Ví dụ tôi muốn làm cho dữ liệu năm 2006 màu đỏ (các thanh khác là màu xanh dương).Biểu đồ Google - Thay đổi màu thanh cá nhân

function drawVisualization() { 
      // Create and populate the data table. 
      var data = new google.visualization.DataTable(); 
      data.addColumn('string', 'Year'); 
      data.addColumn('number', 'Sales'); 

      data.addRows(4); 
      data.setValue(0, 0, '2004'); 
      data.setValue(0, 1, 1000); 

      data.setValue(1, 0, '2005'); 
      data.setValue(1, 1, 1170); 

    /* NEED TO MAKE THIS BAR RED? */ 
      data.setValue(2, 0, '2006'); 
      data.setValue(2, 1, 1400); 

      data.setValue(3, 0, '2007'); 
      data.setValue(3, 1, 1030); 


      chart = new google.visualization.BarChart(document.getElementById('visualization')); 
      chart.draw(data, {width: 400, height: 240, title: 'Company Performance', 
           vAxis: {title: 'Year', titleTextStyle: {color: 'red'}} 
          }); 
} 

Trả lời

28

Đây là mẫu mã thay đổi màu sắc. Lưu ý rằng tùy chọn "màu sắc" chấp nhận một chuỗi các chuỗi.

var options = { 
     title: 'Company Performance', 
     hAxis: {title: 'Year', titleTextStyle: {color: 'red'}}, 
     colors: ['red','green'], 
     is3D:true 
}; 
+9

Điều này dường như áp dụng màu đầu tiên trong mảng cho tất cả các thanh. – chris

+0

@chris bạn có tìm thấy bản sửa lỗi cho điều này không? Có vẻ như đó vẫn là hành vi ra khỏi hộp. –

+0

@ nick-s không, cuối cùng tôi quyết định chuyển sang thư viện khác. – chris

2

Bạn luôn có thể chèn thêm cột và do đó nó sẽ có màu khác. Đó là tất cả những gì có thể được thực hiện tôi đoán.

function drawVisualization() { 
    // Create and populate the data table. 
    var data = new google.visualization.DataTable(); 
      data.addColumn('string', 'Year'); 
      data.addColumn('number', 'Sales'); 
      data.addColumn('number', 'SalesMax'); 

      data.addRows(4); 
      data.setValue(0, 0, '2004'); 
      data.setValue(0, 1, 1000); 
      data.setValue(0, 2, 0); 

      data.setValue(1, 0, '2005'); 
      data.setValue(1, 1, 1170); 
      data.setValue(1, 2, 0); 

    /* NEED TO MAKE THIS BAR RED? */ 
      data.setValue(2, 0, '2006'); 
      data.setValue(2, 1, 0); 
      data.setValue(2, 2, 1400); 

      data.setValue(3, 0, '2007'); 
      data.setValue(3, 1, 1030); 
      data.setValue(3, 2, 0); 


      var chart = new google.visualization.BarChart(document.getElementById('visualization')); 
      chart.draw(data, {width: 400, height: 240, title: 'Company Performance', 
           vAxis: {title: 'Year', titleTextStyle: {color: 'red'}}, 
           series: [{color: 'blue', visibleInLegend: true}, {color: 'red', visibleInLegend: false}] 
          }); 
} 
+0

Tôi thực sự đã thử điều đó và hy vọng tìm ra một cách rõ ràng hơn vì nó thay đổi căn chỉnh và chiều rộng của các thanh. – FattyPotatoes

+0

@FattyPotatoes: rất đúng. Nhưng tôi nghĩ đây là lựa chọn duy nhất. – naveen

5

Như Naveen đề nghị, bạn nên thêm loạt khác để làm cho nó sử dụng một màu sắc khác nhau, tuy nhiên nếu bạn thêm isStacked: true đến lựa chọn của bạn nó sẽ thu hút thanh trên đầu trang của mỗi khác thay vì bên cạnh nhau và sẽ không thay đổi chiều rộng hoặc căn chỉnh của chúng, vì vậy có vẻ tốt. Hãy thử điều này:

function drawVisualization() { 
    // Create and populate the data table. 
    var data = new google.visualization.DataTable(); 
      data.addColumn('string', 'Year'); 
      data.addColumn('number', 'Sales'); 
      data.addColumn('number', 'SalesMax'); 

      data.addRows(4); 
      data.setValue(0, 0, '2004'); 
      data.setValue(0, 1, 1000); 
      data.setValue(0, 2, 0); 

      data.setValue(1, 0, '2005'); 
      data.setValue(1, 1, 1170); 
      data.setValue(1, 2, 0); 

    /* NEED TO MAKE THIS BAR RED? */ 
      data.setValue(2, 0, '2006'); 
      data.setValue(2, 1, 0); 
      data.setValue(2, 2, 1400); 

      data.setValue(3, 0, '2007'); 
      data.setValue(3, 1, 1030); 
      data.setValue(3, 2, 0); 


      var chart = new google.visualization.BarChart(document.getElementById('visualization')); 
    chart.draw(data, {isStacked: true, width: 400, height: 240, title: 'Company Performance', 
           vAxis: {title: 'Year', titleTextStyle: {color: 'red'}}, 
           series: [{color: 'blue', visibleInLegend: true}, {color: 'red', visibleInLegend: false}] 
          }); 
} ​ 
+0

Tuyệt vời!Tôi biết điều này đã được một thời gian dài trước đây, nhưng tôi đã chỉ đấu tranh với cùng một vấn đề này và giải pháp của bạn hoạt động một điều trị. Cảm ơn :) –

+0

-1. Đây là bản sao-n-dán từ câu trả lời của naveen với một bổ sung nhỏ (mặc dù quan trọng). Nên vừa mới nhận xét/chỉnh sửa câu trả lời gốc. –

+0

Vâng, nó chủ yếu là copy'n'pasted từ câu hỏi ban đầu. Tôi đã ghi nhận @naveen cho ý tưởng chuỗi bổ sung và tôi muốn cung cấp một tập lệnh hoàn chỉnh không phù hợp với nhận xét và câu trả lời hoàn chỉnh không phù hợp cho nhận xét. Không có gì ngăn bạn từ +1 cả hai câu trả lời. – Synchro

1

loạt mảng của các đối tượng, hoặc đối tượng với các đối tượng lồng nhau

Một mảng của các đối tượng, từng mô tả định dạng của loạt tương ứng trong biểu đồ. Để sử dụng các giá trị mặc định cho một chuỗi, chỉ định một đối tượng rỗng {}. Nếu một chuỗi hoặc giá trị không được chỉ định, giá trị toàn cầu sẽ được sử dụng. Mỗi đối tượng hỗ trợ các thuộc tính sau:

màu - Màu để sử dụng cho chuỗi này. Chỉ định chuỗi màu HTML hợp lệ. targetAxisIndex - Trục nào để chỉ định chuỗi này, trong đó 0 là trục mặc định và 1 là trục đối diện. Giá trị mặc định là 0; đặt thành 1 để xác định biểu đồ trong đó các chuỗi khác nhau được hiển thị dựa trên các trục khác nhau. Ít nhất một chuỗi được phân bổ cho trục mặc định. Bạn có thể xác định thang đo khác nhau cho các trục khác nhau.

visibleInLegend - Giá trị boolean, trong đó có nghĩa là chuỗi phải có mục nhập chú giải và sai nghĩa là không nên nhập. Mặc định là đúng. Bạn có thể chỉ định hoặc là một mảng đối tượng, mỗi đối tượng trong số đó áp dụng cho chuỗi theo thứ tự đã cho hoặc bạn có thể chỉ định đối tượng trong đó mỗi đứa trẻ có một phím số cho biết chuỗi ứng dụng nào được áp dụng. Ví dụ, hai tờ khai sau giống hệt nhau, và tuyên bố hàng loạt đầu tiên là màu đen và vắng mặt từ truyền thuyết, và thứ tư là màu đỏ và vắng mặt từ truyền thuyết:

series: {0:{color: 'black', visibleInLegend: false}, 3:{color: 'red', visibleInLegend: false}} 
17

Tham khảo https://developers.google.com/chart/interactive/docs/gallery/columnchart#Colors

Bạn có thể thêm {role: 'style'} vào bảng dữ liệu của bạn. Đối với tất cả các cột mà bạn muốn có cùng một màu, chỉ cần chỉ định một kiểu trống ''. Sau đó, trên cột bạn muốn trở thành màu đỏ, bạn có thể chỉ định 'đỏ' hoặc '# ff0000' hoặc 'color: red', vv

// example from Google 
var data = google.visualization.arrayToDataTable([ 
    ['Element', 'Density', { role: 'style' }], 
    ['Copper', 8.94, '#b87333'],   // RGB value 
    ['Silver', 10.49, 'silver'],   // English color name 
    ['Gold', 19.30, 'gold'], 
    ['Platinum', 21.45, 'color: #e5e4e2' ], // CSS-style declaration 
]); 
+1

Tôi nghĩ đây là câu trả lời đúng nhất. Ngoài ra còn có trình định dạng màu, nhưng nó không làm tối đa, vì vậy bạn phải tính toán giá trị tối đa, sau đó đặt ngưỡng. [google.visualization.ColorFormat] (https://developers.google.com/chart/interactive/docs/reference#colorformatter) – scipilot

+8

vì một số lý do, câu trả lời này không hoạt động ngay cả khi nó xuất phát trực tiếp từ tài liệu – avoliva

+0

Đây là tuyệt vời cho các bảng tĩnh, nhưng nếu bạn cần thay đổi giá trị và số lượng giá trị động thì tôi không thấy cách này có thể hoạt động. Tôi đã cố gắng đặt một vòng lặp for trong đó nhưng điều đó dường như không làm điều đó. –

1

tôi giải quyết vấn đề này sử dụng kỹ thuật đóng vai trò phong cách bây giờ cho bảng xếp hạng tạo dữ liệu động, tôi đã sử dụng một chức năng ngẫu nhiên để tạo màu

function random_color_part() { 
return str_pad(dechex(mt_rand(0, 255)), 2, '0', STR_PAD_LEFT); 
} 

function random_color() { 
return random_color_part() . random_color_part() . random_color_part(); 
} 
then simply 
$color=random_color(); 
print "['$rows[1]',$rows[2],'#$color'],\n"; 
Các vấn đề liên quan