2013-06-03 12 views
7

Obecnie używam logscale, aby mieć większe możliwości kreślenia moich danych. Niemniej jednak moje dane zawierają również wartości zerowe. Wiem, że te wartości zerowe nie będą działać na logscale, ponieważ log (0) nie jest zdefiniowany.Wykresy logscale z zerowymi wartościami w matplotlib

Tak np

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('log') 
ax.set_xscale('log') 

całkowicie pomija się wartość zero. Czy to zachowanie jest dopuszczalne? Przynajmniej powinno być jakieś ostrzeżenie. Rozpoznałem to tylko przez przypadek. Czy istnieje również sposób na wykreślenie danych zerowych w logscale?

Dzięki!

P.S .: Mam nadzieję, że pasuje to do stackoverflow. Nie znalazłem listy dyskusyjnej matplotlib.

+1

mpl listach dyskusyjnych -> http://sourceforge.net/mail/?group_id=80706 – tacaswell

+2

możliwe duplikat [matplotlib skali logarytmicznej o wartości zerowej] (http://stackoverflow.com/questions/16382917/matplotlib-logarithmic-scale-z-zero-value) –

+0

Powyższe pytanie ma dwa możliwe rozwiązania. –

Odpowiedz

17

Najłatwiej jest użyć do tego celu działki "symlog". Odstęp w pobliżu 0 będzie miał skalę liniową, więc można wyświetlić 0.

import matplotlib.pyplot as plt 
fig, ax = plt.subplots() 
ax.plot([0,1,2],[10,10,100],marker='o',linestyle='-') 
ax.set_yscale('symlog') 
ax.set_xscale('symlog') 
plt.show() 

enter image description here

Symlog przedstawia mały odstęp w pobliżu zera (powyżej i poniżej) do wykorzystania w skali liniowej. Dzięki temu rzeczy mogą przekroczyć 0 bez powodowania eksplozji log(x) (lub raczej przejścia do -inf).

Jest ładny wizualne porównanie jako SO odpowiedź tutaj: https://stackoverflow.com/a/3513150/325565

+0

Świetna odpowiedź. Dziękuję za to. Czy mógłbyś wyjaśnić, co dokładnie robi symlog? – fsociety

+1

Pewnie! Zobacz aktualizacje. Istnieje również kilka przykładów w galerii matplotlib (np. Http://matplotlib.org/examples/pylab_examples/symlog_demo.html), ale nie są one tak wyraźne, jak odpowiedź SO, z którą się łączyłem. –

+0

Super pomocny. Dzięki. – Newb

Powiązane problemy