2016-08-05 6 views
1

Meine Trace-Datei kann von here heruntergeladen werden.Zeichnen von x- und y-Achse in logarithmischem Maßstab in Pandas mit Matplotlib

Wenn ich nur y-Achse im logarithmischen Maßstab plotten. alles ist in Ordnung

import pandas as pd 
import numpy 
import matplotlib.pyplot as plt 

iplevel = pd.read_csv('iplevel.csv') 
fig = plt.figure() 
#plt.xscale('log') 
plt.yscale('log') 
plt.title(' Size Vs Duration (at IP level) for ') 

plt.xlabel('Duration (in seconds)') 
plt.ylabel('Size (in bytes)') 
plt.scatter(iplevel['Time'], iplevel['Length']) 
fig.tight_layout() 
fig.savefig('iplevel_timevdur.png', dpi=fig.dpi) 

Only y axis in log scale

Wenn ich beide x plotten und y-Achse in Log-Skala, geschieht etwas Seltsames

import pandas as pd 
import numpy 
import matplotlib.pyplot as plt 

iplevel = pd.read_csv('iplevel.csv') 
fig = plt.figure() 
plt.xscale('log') 
plt.yscale('log') 
plt.title(' Size Vs Duration (at IP level) for ') 

plt.xlabel('Duration (in seconds)') 
plt.ylabel('Size (in bytes)') 
plt.scatter(iplevel['Time'], iplevel['Length']) 
fig.tight_layout() 
fig.savefig('iplevel_timevdur.png', dpi=fig.dpi) 

enter image description here

Ich bin nicht sicher, wohin ich gehe falsch. Irgendwelche Ideen/Vorschläge begrüßen

Antwort

2

Es sieht aus wie Sie einige Nullen in Ihren X-Werten haben. log(0) ist nicht definiert, log(veryclosetozero) ist 10^{-verymuch}.

Edit:
Zusätzlich Schwimmer Darstellung von Zahlen ist nicht immer ganz genau, so 0.0 könnte am Ende als 0.00000000000000000001 oder ähnliches gespeichert werden. Die log-Funktion würde in diesem Fall keinen Fehler erzeugen, sondern einfach den Logarithmus von etwas sehr sehr kleinem berechnen.

+0

Danke. Also ist das Entfernen des Wertes die einzige Lösung. Oder gibt es irgendwelche Ideen? – user2532296

+0

Wenn Sie loggen möchten, ja. (Nun, die einzige gute Lösung. Sie könnten einen konstanten Offset hinzufügen, aber das würde Ihre Daten falsch darstellen.) – Alex

+0

Sie könnten auch die Grenzen der Achsen mit 'ax.set_xlim' und' ax.set_ylim' festlegen, einfach das defekte verstecken Werte. Sieht so aus, als wäre 10E-10 als untere X-Grenze ausreichend. – pathoren