2013-07-04 7 views
5

Chcę mieć etykiety tekstowe zamiast liczb na etykietach osi wykresów Google. Jak mogę je zarchiwizować? Wynik powinien wyglądać następująco (przykład wykresu bąbelkowego):Jak ustawić etykiety osi wykresów Google na ciąg/tekst/nominał/kategorię zamiast numerycznego

example bubble chart with text on both axis

Znalazłem ten przykład gdzieś tutaj na stackoverflow, ale teraz nie mogę znaleźć go już. W każdym razie odpowiedź tam była niekompletna i nie działa. Nie zawierał całego kodu HTML i miał zmienne niezdefiniowane. Ważne jest także ustawienie kroku, ponieważ w przeciwnym razie widzisz tylko co drugą etykietę lub co 10. ...

Odpowiedz

4

Oto pełne źródło HTML + JS, aby utworzyć powyższy wykres.

Zawiera konwersję etykiet na obie osie na ciągi (zdefiniowane w tablicy). Zawiera także ustawienie kroków osi, aby naprawdę wszystkie etykiety były widoczne.

Mam nadzieję, że jest to przydatne dla kogoś :)

<html> 
    <head> 
    <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
    <script type="text/javascript" src="jquery-1.7.2.min.js"></script> 
    <script type="text/javascript"> 
    google.load("visualization", "1", {packages:["corechart"]}); 
    google.setOnLoadCallback(drawChart); 
    function drawChart() { 

    //these arrays hold the label strings 
    var products = new Array(); 
    for (var i = 1; i < 10; i ++) 
     products[i]='product'+i; 

    var customers = new Array(); 
    for (var i = 1; i < 8; i ++) 
     customers[i]='customer'+i; 


    var options = { 
    'title':'Customer/Product Grid', 
    // 'vAxis': { textPosition: 'in' }, 
    vAxis: { 
    viewWindow: { 
     max: products.length, 
     min: 0, 
     }, 
    gridlines: { 
     count: products.length, 
     color : 'white', 
     } 
    }, 
    hAxis: { 
    viewWindow: { 
     max: customers.length, 
     min: 0, 
     }, 
    gridlines: { 
     count: customers.length, 
     color : 'white', 
     } 
    }, 
    'width': 1000, 
    'height':500 
    }; 

    //dtd 
    var customer_product_grid_data_table = new google.visualization.DataTable(); 
    customer_product_grid_data_table.addColumn('string', 'Customer and Product'); 
    customer_product_grid_data_table.addColumn('number', 'Customer'); 
    customer_product_grid_data_table.addColumn('number', 'Product'); 
    customer_product_grid_data_table.addColumn('number', 'Profit Margin'); 
    customer_product_grid_data_table.addColumn('number', 'Proportion of Sales'); 

    // add some random numbers to show off 
    for (var i = 1; i < products.length; i ++) 
    for (var j = 1; j < customers.length; j ++) 
     { 
     customer_product_grid_data_table.addRow([ 
      '',j,i,50*Math.cos(i+j),20*Math.sin(i) 
     ]); 
     } 

    var chart = new google.visualization.BubbleChart(document.getElementById('chart_div')); 
    chart.draw(customer_product_grid_data_table, options); 

    /* 
    * This can also be 
    * text[text-anchor="start"] 
    * or 
    * text[text-anchor="middle"] 
    * depending on the axis settings. If it doesnt work, try another one, or check the generated SVG source code in your HTML doc. 
    */ 
    for (var i = 0; i < products.length ; i ++){ 
    $('#chart_div svg text[text-anchor="end"]:contains("'+i+'")').text(function(j,t){ 
     if (t == i){ 
     if (i >= products.length || i < 1){ 
      return " "; 
     } 
     return products[i]; 
     } 
    }); 
    } 

    for (var i = 0; i < customers.length ; i ++){ 
    $('#chart_div svg text[text-anchor="middle"]:contains("'+i+'")').text(function(j,t){ 
     if (t == i){ 
     if (i >= customers.length || i < 1){ 
      return " "; 
     } 
     return customers[i]; 
     } 
    }); 


    } // end function 

    } 
    </script> 
    </head> 
    <body> 
    <div id="chart_div" style="width: 900px; height: 500px;"></div> 
    </body> 
</html> 
0

Zamiast wartości numerycznych w etykietach można mieć wartości ciągów, jak określono w zrzucie ekranu. Aby to zrobić, trzeba włożyć

format:"product" 

w opcjach vaxis i

format:"customer" 

w haxis opcji.

Mam nadzieję, że przyda ci się to.

+0

cześć. Dziękuję za Twój wkład. Twoje ma rację, która produkuje takie same wyniki. Ale tak naprawdę zakładałem, że nazwy nie są trywialne. Pokazałem tylko kilka przykładowych nazw. W rzeczywistości nazwy powinny mieć bardziej realistyczne nazwy, takie jak: customer [1] = 'Microsoft', customer [2] = 'Apple', customer [3] = 'Google', etc ... –

+0

Nie, nie ma. Ponieważ zamieszczony tam link dotyczy zupełnie innego problemu, który nie ma nic wspólnego z tym pytaniem tutaj :) –

0

przechodzą osi x etykiety jako ciągi i dodać typ string,

data.addColumn('string', 'product'); 
Powiązane problemy