Entfernen Sie Polster oder Ränder aus Google Charts


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>

Beispiel Geige

Wie entferne ich in diesem Beispiel Polster oder Ränder?


Wenn jemand nach rechts rechtfertigen möchte, weil Sie Messungen links im Liniendiagramm haben, chartArea: {width: '70%', left: '30%'}hat er den Trick für mich getan. Quelle: code.google.com/p/google-visualization-api-issues/issues/…
IsmailS

Antworten:


246

Durch Hinzufügen und Optimieren einiger Konfigurationsoptionen, die in der API-Dokumentation aufgeführt sind , können Sie viele verschiedene Stile erstellen. Zum Beispiel, hier ist eine Version , dass entfernt die größten Teil des zusätzlichen Leerraumes , der durch die Einstellung chartArea.widthauf 100% und chartArea.heightauf 80% und die Bewegungs legend.positionnach unten :

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

Wenn Sie es weiter optimieren möchten, versuchen Sie, diese Werte zu ändern oder andere Eigenschaften über den obigen Link zu verwenden.


78

Ich bin ziemlich spät dran, aber jeder Benutzer, der danach sucht, kann Hilfe bekommen. Innerhalb der Optionen können Sie einen neuen Parameter namens chartArea übergeben .

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

Die Optionen für links und oben definieren den Umfang der Polsterung von links und oben. Hoffe das wird helfen.


Die chartArea.top hat den Trick für meine dynamisch dimensionierte Div gemacht. Vielen Dank.
Blamkin86

60

Ich kam hier an wie die meisten Leute mit dem gleichen Problem und war schockiert, dass keine der Antworten auch nur aus der Ferne funktionierte.

Für alle Interessierten ist hier die eigentliche Lösung:

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

Der Schlüssel hier hat nichts mit den Werten "left" oder "top" zu tun. Sondern dass die:

Die Abmessungen sowohl des Diagramms als auch des Diagrammbereichs werden auf den gleichen Wert gesetzt

Als Ergänzung zu meiner Antwort. Das Obige wird in der Tat das "übermäßige" Problem mit Auffüllen / Rand / Leerzeichen lösen. Wenn Sie jedoch Achsenbeschriftungen und / oder eine Legende einfügen möchten, müssen Sie die Höhe und Breite des Diagrammbereichs so verringern, dass sie geringfügig unter der äußeren Breite / Höhe liegen. Dadurch wird der Diagramm-API mitgeteilt, dass genügend Platz zum Anzeigen dieser Eigenschaften vorhanden ist. Andernfalls werden sie gerne ausgeschlossen.


2
Als Ergänzung zu meiner Antwort. Dies wird in der Tat das "übermäßige" Problem mit Auffüllen / Rand / Leerzeichen lösen. Wenn Sie jedoch Achsenbeschriftungen und / oder eine Legende einfügen möchten, müssen Sie die Höhe und Breite des Diagrammbereichs so verringern, dass sie geringfügig unter der äußeren Breite / Höhe liegen. Dadurch wird der Diagramm-API mitgeteilt, dass genügend Platz zum Anzeigen dieser Eigenschaften vorhanden ist. Andernfalls werden sie gerne ausgeschlossen.
Pimbrouwers

1
Ich denke, der Grund, warum die anderen Lösungen für Sie nicht funktionierten, ist wahrscheinlich, dass sie davon ausgegangen sind, dass das Diagramm in einen DIV eingefügt wurde, der bereits voreingestellte Breiten- und Höhenattribute hatte, aber das haben Sie nicht getan. Es ist eine gute Idee, die Höhe und Breite im HTML-Code so einzustellen, dass sich das Layout der Seite nicht ändert, wenn das Diagramm gefüllt wird. Dadurch wird verhindert, dass beim Laden auf der Seite "herumspringt".
Dave Burton

@ Dave danke für den Vorschlag, aber ich stimme nicht unbedingt zu. Es gibt viele Situationen, in denen Sie einfach nicht wissen, wie diese Werte aussehen werden. Und es sieht so aus, als hätten mindestens 15 andere das Gefühl, dass mein Angebot angemessen ist.
Pimbrouwers

1
Ich stimme zu, Pim. Wenn Sie die Breite und / oder Höhe nicht im Voraus kennen (möglicherweise, weil die Seite reaktionsschnell angepasst werden soll), können Sie die Breite und Höhe im DIV nicht voreinstellen. Ich habe nur darauf hingewiesen, warum ich denke, dass die in den anderen Antworten angegebenen Lösungen für sie funktionierten, aber für Sie nicht funktionierten, und warum es eine gute Idee ist, die Breite und Höhe im DIV vorzugeben, wenn Sie können.
Dave Burton

1
Aus Gründen, auf die @ DaveBurton hinweist, ist dies wahrscheinlich die richtige Antwort, wenn Sie mit CSS Grid arbeiten (was ich bin)
Stephen R

14

Es fehlt in den Dokumenten (ich verwende Version 43), aber Sie können tatsächlich die rechte und untere Eigenschaft des Diagrammbereichs verwenden:

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

So ist es möglich, die volle Reaktionsbreite und -höhe zu verwenden und zu verhindern, dass Achsenbeschriftungen oder Legenden beschnitten werden.


Die Möglichkeit, richtig zu verwenden, ist definitiv eine nette Ergänzung. Bei einem Säulendiagramm, das Zahlen für die vertikale Achse erfordert, wird es jedoch schwierig, wenn die Werte um ein gutes Bit schwanken - zum Beispiel ein Diagramm mit Werten im Bereich von 0 -. 100 würde einen linken Wert von 20 Pixel erfordern, aber 0 - 10 mil würden 100 Pixel benötigen, und die Verwendung von 100 Pixel würde dann einen ziemlich großen Rand hinterlassen, was meiner Meinung nach alle von uns versuchen, loszuwerden :) Es sei denn, es gibt einen Eine Option, mit der das Diagramm seine eigene Breite anpassen kann, die mir fehlt. Irgendwelche Gedanken darüber, wie man das lösen könnte?
user3800174

Es sieht so aus, als hätten sie es am 2. Oktober 2015 hier dokumentiert: archive.is/lwbQY#selection-2997.0-3011.1
Dave Burton

13

Es gibt diese Möglichkeit wie Aman Virk erwähnt :

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

Aber denken Sie daran, dass die Polsterung und der Rand Sie nicht stören. Wenn Sie die Möglichkeit haben, zwischen verschiedenen Diagrammtypen wie einem ColumnChart und einem mit vertikalen Spalten zu wechseln, benötigen Sie einen gewissen Rand für die Anzeige der Beschriftungen dieser Linien.

Wenn Sie diesen Rand entfernen, werden am Ende nur ein Teil der Etiketten oder gar keine Etiketten angezeigt.

Wenn Sie also nur einen Diagrammtyp haben, können Sie den Rand und die Auffüllung ändern, wie Arman sagte. Aber wenn es möglich ist zu wechseln, ändern Sie sie nicht.


11

Es gibt ein spezielles Thema dafür

options: {
  theme: 'maximized'
}

aus den Google Chart-Dokumenten:

Derzeit ist nur ein Thema verfügbar:

'maximiert' - Maximiert den Bereich des Diagramms und zeichnet die Legende und alle Beschriftungen innerhalb des Diagrammbereichs. Legt die folgenden Optionen fest:

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

Dies scheint die beste Option zu sein. Nach dem Einstellen des Themas: 'maximiert' ist es weiterhin möglich, das Erscheinungsbild abzustimmen, z. B. Höhe: '90%', Textposition: 'out' usw.
Jiri Kriz
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.