2014-10-10 7 views
7

Ich habe ein Liniendiagramm basierend auf einer einfachen Liste von Zahlen. Standardmäßig ist die X-Achse nur ein Inkrement von 1 für jeden geplotteten Wert. Ich möchte stattdessen ein Prozentsatz sein, kann aber nicht herausfinden, wie. Anstatt also eine x-Achse von 0 bis 5 zu haben, wäre es von 0% bis 100% gehen (aber einigermaßen Abstand Striche zu halten. Unten-Code. Dank!Pyplot: mit Prozentsatz auf X-Achse

from matplotlib import pyplot as plt 
from mpl_toolkits.axes_grid.axislines import Subplot 

data=[8,12,15,17,18,18.5] 
fig=plt.figure(1,(7,4)) 
ax=Subplot(fig,111) 
fig.add_subplot(ax) 
plt.plot(data) 

Antwort

18

Der folgende Code wird Ihnen eine vereinfachte x-achse, die prozentsatzbasiert ist, wird davon ausgegangen, dass alle Werte gleich 0% und 100% sind

Es wird ein perc Array erstellt, das gleichmäßig verteilte Prozentsätze enthält, die zum Plotten verwendet werden können passt die Formatierung für die X-Achse so an, dass sie ein Prozentzeichen enthält, das verwendet.Dieser verwendet leider die Formatierung des alten Stils, im Gegensatz zu dem neuen Stil, finden Sie die alten Stildokumente here.

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.ticker as mtick 

data = [8,12,15,17,18,18.5] 
perc = np.linspace(0,100,len(data)) 

fig = plt.figure(1, (7,4)) 
ax = fig.add_subplot(1,1,1) 

ax.plot(perc, data) 

fmt = '%.0f%%' # Format you want the ticks, e.g. '40%' 
xticks = mtick.FormatStrFormatter(fmt) 
ax.xaxis.set_major_formatter(xticks) 

plt.show() 

Example plot

+0

Nichts ist falsch mit dem alten Stil der Formatierung. Es ist immer noch interoperabler von beiden (siehe zum Beispiel Logging-Modul). –

+0

Welches Format hätten die Dinge, wenn die ursprünglichen Werte schon 0,5 wären? Ich möchte das zu 50% machen. –

+1

Eine andere mögliche Lösung wäre 'mick.FuncFormatter (" {:. 0%} ". Format)', die neue Stilformatierungsstrings verwendet, die ich besser lesbar und flexibler finde. –

2

Dies ist ein paar Monate zu spät, aber ich habe PR#6251 mit matplotlib erstellt eine neue PercentFormatter Klasse hinzuzufügen. Mit dieser Klasse, die Sie wie folgt tun, um die Achse zu setzen:

import matplotlib.ticker as mtick 

# Actual plotting code omitted 

ax.xaxis.set_major_formatter(mtick.PercentFormatter(5.0)) 

Dies wird zu 100% Werte von 0 bis 5 auf einer Skala von 0% angezeigt. Der Formatierer ist dem Konzept von @Ffisegydd ähnlich, außer dass er beliebige vorhandene Ticks berücksichtigen kann.

PercentFormatter() akzeptiert drei Argumente, max, decimals und symbol. max können Sie den Wert festlegen, der 100% auf der Achse entspricht (in Ihrem Beispiel 5).

Mit den anderen beiden Parametern können Sie die Anzahl der Nachkommastellen und das Symbol festlegen. Sie sind standardmäßig auf None bzw. '%' eingestellt. decimals=None wird automatisch die Anzahl der Dezimalpunkte abhängig von der Anzahl der angezeigten Achsen festlegen.

Beachten Sie, dass dieser Formatierer alle Ticks verwendet, die normalerweise generiert werden, wenn Sie nur Ihre Daten geplottet haben. Es ändert nichts außer den Zeichenfolgen, die an die Teilstriche ausgegeben werden.