2012-05-15 51 views
20

使用Google Charts的條形圖,是否可以更改一個欄的顏色。例如,我想讓2006年的數據變成紅色(其他酒吧是藍色的)。Google Charts - 更改單個欄的顏色

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'}} 
          }); 
} 

回答

28

這是更改顏色的代碼示例。請注意, 「顏色」選項接受一組字符串。

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

這似乎將數組中的第一個顏色應用於所有條形。 – chris

+0

@chris您是否找到了解決方法?看起來它仍然是開箱即用的行爲。 –

+0

@ nick-s不,我在最後決定改用另一個庫。 – chris

2

你總是可以插入一個額外的列,所以它會有不同的顏色。這就是我所能做的一切。

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

其實我試過了,希望找到一個更清潔的方式,因爲它改變了吧對齊和寬度。 – FattyPotatoes

+0

@FattyPotatoes:非常真實。但我認爲這是唯一的選擇。 – naveen

5

由於納文建議,應添加另一系列,以使其使用不同的顏色,但如果添加isStacked: true到你的選擇將借鑑酒吧在彼此的頂部,而不是彼此相鄰並不會改變它們的寬度或對齊方式,所以看起來不錯。試試這個:

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

優秀!我知道這是很久以前的事了,但我一直在努力解決這個問題,你的解決方案是一種享受。謝謝:) –

+0

-1。這是從naveen的答案中複製粘貼的,只有一個很小的(雖然很重要)。應該只是評論/編輯原始答案。 –

+0

好吧,它大部分是從原始問題中拷貝出來的。我沒有把額外的系列想法歸功於@naveen,並且我想提供一個完整的工作腳本,它不適合發表評論,並且完整的答案不適用於評論。沒有什麼能阻止你從兩個答案+1。 – Synchro

1

系列陣列的對象,或對象,具有嵌套的對象

對象的數組,每個描述圖表中的相應系列的格式。要爲系列使用默認值,請指定一個空對象{}。如果未指定序列或值,則將使用全局值。每個對象都支持以下屬性:

顏色 - 用於此係列的顏色。指定一個有效的HTML顏色字符串。 targetAxisIndex - 將該系列分配給哪個軸,其中0是默認軸,1是相反的軸。默認值是0;設置爲1來定義一個圖表,其中不同系列的圖表針對不同的軸進行渲染。至少有一個系列被分配給默認軸。您可以爲不同的軸定義不同的比例。

visibleInLegend - 一個布爾值,其中true表示該系列應該有圖例條目,而false表示它不應該。默認值是true。 您可以指定一個對象數組,每個對象都按照給定的順序應用於系列,也可以指定一個對象,其中每個子對象都有一個數字鍵,指示它應用於哪個系列。例如,下面的兩個聲明是相同的,並聲明所述第一系列爲黑色,從圖例不存在,以及第四紅色和缺席從圖例:

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

參見https://developers.google.com/chart/interactive/docs/gallery/columnchart#Colors

你可以將{role:'style'}添加到您的數據表中。對於所有想要具有相同顏色的列,只需指定一個空的樣式「'。然後,在列,你想紅,你可能只是指定「紅色」或「#FF0000」或「顏色:紅」等

// 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

我認爲這是最正確的答案。 也有顏色格式化程序,但它不能最大化,所以你必須預先計算最大值,然後設置一個閾值。 [google.visualization.ColorFormat](https://developers.google.com/chart/interactive/docs/reference#colorformatter) – scipilot

+8

由於某種原因,即使它直接來自文檔,此答案也不起作用 – avoliva

+0

這是非常適合靜態表,但是如果您需要動態更改值和數值,我不會看到這是如何工作的。我試圖在那裏放置一個for循環,但似乎並沒有這樣做。 –

1

我使用的角色風格的技術現在圖表解決這個問題生成動態數據,我用隨機函數生成的顏色

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";