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.