Rimuovi il riempimento o i margini dai grafici di Google


151

// Load the Visualization API and the piechart package.
google.load('visualization', '1.0', {'packages':['corechart']});

// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(drawChart);

// Callback that creates and populates a data table,
// instantiates the pie chart, passes in the data and
// draws it.
function drawChart() {

  // Create the data table.
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'Topping');
  data.addColumn('number', 'Slices');

  var myData = {
    'Mushrooms': 3,
    'Onions': 1,
    'Olives': 1,
    'Zucchini': 1,
    'Pepperoni': 2
  };

  var rows = [];
  for (element in myData) {
      rows.push([element + " (" + myData[element] + ")", myData[element]])
  }
  data.addRows(rows);

  // Set chart options
  var options = {'title':'How Much Pizza I Ate Last Night',
                 'width':450,
                 'height':300};

  // Instantiate and draw our chart, passing in some options.
  var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
  chart.draw(data, options);
}
<script type="text/javascript" src="https://www.google.com/jsapi"></script>

<div id="chart_div"></div>

Esempio di violino

Come rimuovere padding o margini in questo esempio?


se qualcuno vuole giustificare a destra perché hai misure sulla sinistra del grafico a linee, ha chartArea: {width: '70%', left: '30%'}fatto il trucco per me. Fonte: code.google.com/p/google-visualization-api-issues/issues/…
IsmailS

Risposte:


246

Aggiungendo e ottimizzando alcune opzioni di configurazione elencate nella documentazione dell'API , è possibile creare molti stili diversi. Per esempio, qui è una versione che elimina gran parte dello spazio vuoto in più impostando il chartArea.widthal 100% e chartArea.heightal 80% e spostando il legend.positiona fondo :

// Set chart options
var options = {'title': 'How Much Pizza I Ate Last Night',
               'width': 350,
               'height': 400,
               'chartArea': {'width': '100%', 'height': '80%'},
               'legend': {'position': 'bottom'}
    };

Se vuoi ottimizzarlo di più, prova a cambiare questi valori o usando altre proprietà dal link sopra.


78

Sono in ritardo, ma qualsiasi utente alla ricerca di questo può ottenere aiuto da esso. All'interno delle opzioni è possibile passare un nuovo parametro chiamato chartArea .

        var options = {
        chartArea:{left:10,top:20,width:"100%",height:"100%"}
    };

Le opzioni sinistra e in alto definiranno la quantità di imbottitura da sinistra e in alto. Spero che questo possa aiutare.


chartArea.top ha fatto il trucco per il mio div di dimensioni dinamiche. Grazie.
Blamkin86,

60

Sono arrivato qui come la maggior parte delle persone con lo stesso problema e sono rimasto scioccato dal fatto che nessuna delle risposte ha funzionato a distanza.

Per chiunque sia interessato, ecco la soluzione effettiva:

... //rest of options
width: '100%',
height: '350',
chartArea:{
    left:5,
    top: 20,
    width: '100%',
    height: '350',
}
... //rest of options

La chiave qui non ha nulla a che fare con i valori "left" o "top". Ma piuttosto che il:

Le dimensioni del grafico e dell'area del grafico sono impostate e impostate sullo STESSO VALORE

Come emendamento alla mia risposta. Quanto sopra risolverà effettivamente il problema "eccessivo" di riempimento / margine / spazio bianco. Tuttavia, se si desidera includere etichette degli assi e / o una legenda, è necessario ridurre l'altezza e la larghezza dell'area del grafico in modo che sia leggermente inferiore alla larghezza / altezza esterna. Questo "dirà" all'API del grafico che c'è spazio sufficiente per visualizzare queste proprietà. Altrimenti li escluderà felicemente.


2
Come emendamento alla mia risposta. Ciò risolverà effettivamente il problema "eccessivo" di imbottitura / margine / spazio bianco. Tuttavia, se si desidera includere etichette degli assi e / o una legenda, è necessario ridurre l'altezza e la larghezza dell'area del grafico in modo che sia leggermente inferiore alla larghezza / altezza esterna. Questo "dirà" all'API del grafico che c'è spazio sufficiente per visualizzare queste proprietà. Altrimenti li escluderà felicemente.
pimbrouwers,

1
Penso che la ragione per cui le altre soluzioni non hanno funzionato per te è probabilmente che presumevano che il grafico fosse inserito in un DIV che aveva già attributi di larghezza e altezza preimpostati, ma non l'hai fatto. È una buona idea preimpostare l'altezza e la larghezza nell'HTML in modo che il layout della pagina non cambi quando il grafico viene riempito. Ciò impedirà alle cose di "saltare in giro" sulla pagina mentre si carica.
Dave Burton,

@Dave grazie per il suggerimento, ma non sono necessariamente d'accordo. Ci sono molte situazioni in cui semplicemente non sai quali saranno questi valori. E sembra che almeno altre 15 persone abbiano l'impressione che la mia offerta sia adeguata.
pimbrouwers,

1
Sono d'accordo, Pim. Quando non si conosce in anticipo la larghezza e / o l'altezza (forse perché si desidera che la pagina si adatti in modo reattivo), non è possibile preimpostare la larghezza e l'altezza nel DIV. Stavo solo sottolineando perché penso che le soluzioni fornite nelle altre risposte funzionassero per loro ma non funzionassero per te, e perché è una buona idea preimpostare la larghezza e l'altezza nel DIV se puoi.
Dave Burton,

1
Per ragioni che sottolinea @DaveBurton, questa è probabilmente la risposta corretta se si lavora con CSS Grid (che io sono)
Stephen R

14

Manca nei documenti (sto usando la versione 43), ma in realtà puoi usare la proprietà destra e in basso dell'area del grafico:

var options = {
  chartArea:{
    left:10,
    right:10, // !!! works !!!
    bottom:20,  // !!! works !!!
    top:20,
    width:"100%",
    height:"100%"
  }
};

Quindi è possibile utilizzare la larghezza e l'altezza reattive complete e impedire che vengano ritagliate etichette o legende degli assi.


Essere in grado di usare bene è sicuramente una buona aggiunta, tuttavia nel caso di un istogramma che richiede numeri per l'asse verticale diventerà complicato quando i valori fluttuano di un buon bit - ad esempio un grafico con valori che vanno da 0 - 100 richiederebbe un valore sinistro di 20 pixel, ma 0-10 mil richiederebbero 100 pixel, e l'utilizzo di 100 pixel lascerebbe quindi un margine abbastanza grande che è quello che penso tutti noi stiamo cercando di sbarazzarsi di :) A meno che non ci sia un'opzione che consente al grafico di regolare la propria larghezza che mi manca. Qualche idea su come si potrebbe essere in grado di risolverlo?
user3800174

Sembra che l'abbiano documentato il 2 ottobre 2015, qui: archive.is/lwbQY#selection-2997.0-3011.1
Dave Burton

13

C'è questa possibilità, come menzionato da Aman Virk :

var options = {
    chartArea:{left:10,top:20,width:"100%",height:"100%"}
};

Ma tieni presente che l'imbottitura e il margine non sono lì per disturbarti. Se hai la possibilità di passare tra diversi tipi di grafici come un ColumnChart e quello con colonne verticali, allora hai bisogno di un margine per visualizzare le etichette di quelle linee.

Se togli quel margine, finirai per mostrare solo una parte delle etichette o nessuna etichetta.

Quindi, se hai solo un tipo di grafico, puoi modificare il margine e il riempimento come ha detto Arman. Ma se è possibile cambiare non cambiarli.


12

C'è un tema disponibile appositamente per questo

options: {
  theme: 'maximized'
}

dai documenti di Google Chart:

Attualmente è disponibile solo un tema:

'massimizzato': ingrandisce l'area del grafico e disegna la legenda e tutte le etichette all'interno dell'area del grafico. Imposta le seguenti opzioni:

chartArea: {width: '100%', height: '100%'},
legend: {position: 'in'},
titlePosition: 'in', axisTitlesPosition: 'in',
hAxis: {textPosition: 'in'}, vAxis: {textPosition: 'in'}

Questa sembra l'opzione migliore. Dopo aver impostato il tema: "ingrandito" è ancora possibile ottimizzare l'aspetto, ad esempio altezza: "90%", testo Posizione: "fuori", ecc.
Jiri Kriz,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.