programing

과학적 표기법 방지

randomtip 2023. 9. 18. 23:33
반응형

과학적 표기법 방지

다음 코드가 있습니다.

plt.plot(range(2003,2012,1),range(200300,201200,100))
# several solutions from other questions have not worked, including
# plt.ticklabel_format(style='sci', axis='x', scilimits=(-1000000,1000000))
# ax.get_xaxis().get_major_formatter().set_useOffset(False)
plt.show()

그러면 다음 그림이 생성됩니다.

plot

여기서 어떻게 하면 과학적 표기를 방지할 수 있습니까?ticklabel_format?이(가) 고장 났습니까? 실제로 오프셋을 제거하는 문제를 해결하지는 못합니다.

plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(useOffset=False)

enter image description here

사용자의 경우 실제로 오프셋을 사용하지 않도록 설정해야 합니다.과학적 표기법을 사용하는 것은 오프셋 값으로 사물을 보여주는 것과는 별개의 설정입니다.

하지만,ax.ticklabel_format(useOffset=False)작동했어야 합니다(비록 당신이 그것을 그렇지 않은 것들 중 하나로 나열했지만).

예를 들어,

fig, ax = plt.subplots()
ax.plot(range(2003,2012,1),range(200300,201200,100))
ax.ticklabel_format(useOffset=False)
plt.show()

enter image description here

오프셋과 과학적 공증을 모두 비활성화하려면ax.ticklabel_format(useOffset=False, style='plain').


"상계"와 "과학적 표기법"의 차이

매트플롯 리브 축 형식에서 "과학적 표기법"은 표시된 숫자에 대한 승수를 나타내는 반면 "오프셋"은 추가되는 별개의 용어입니다.

예를 들어 다음과 같습니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(1000, 1001, 100)
y = np.linspace(1e-9, 1e9, 100)

fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()

x축은 오프셋을 갖습니다(참고:+sign)을 사용하고 y축은 과학적 표기법(승수 - No plus sign)을 사용합니다.

enter image description here

둘 중 하나를 따로 비활성화할 수 있습니다.가장 편리한 방법은ax.ticklabel_format메소드(또는plt.ticklabel_format).

예를 들어 다음을 호출하는 경우:

ax.ticklabel_format(style='plain')

y축의 과학적 표기를 비활성화합니다.

enter image description here

우리가 전화하면

ax.ticklabel_format(useOffset=False)

x축에서 오프셋을 비활성화하지만 y축 과학 표기법은 그대로 유지합니다.

enter image description here

마지막으로 다음을 통해 둘 다 비활성화할 수 있습니다.

ax.ticklabel_format(useOffset=False, style='plain')

enter image description here

과학적 표기법을 방지하는 또 다른 방법은 과학적 표기법이 사용되지 않는 간격을 "넓히는" 것입니다.scilimits=매개 변수.

plt.plot(np.arange(1e6, 3 * 1e7, 1e6))
plt.ticklabel_format(scilimits=(-5, 8))

result1

여기서 과학적 표기법은 축 한계가 10^-5보다 작거나 10^8보다 큰 경우 축에 사용됩니다.

기본적으로 과학적 표기법은 10^-5보다 작거나 10^6보다 큰 숫자에 사용되므로 틱의 가장 높은 값이 이 구간에 있는 경우 과학적 표기법은 사용되지 않습니다.

그래서 그가 만든 줄거리는

plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 1000000))

는 1000000=10^6이기 때문에 과학적 표기법을 가지고 있지만 다음에 의해 만들어진 플롯.

plt.plot(np.arange(50), np.logspace(0, 6));
plt.ylim((0, 999999));

는 y절(999999)이 기본 한계인 10^6보다 작기 때문이 아닙니다.

이 기본 제한은 다음을 사용하여 변경할 수 있습니다.scilimits=의 매개 변수ticklabel_format(); 형식의 튜플을 간단히 전달합니다.(low, high)눈금의 상한이 간격 내에 있어야 하는 위치(10^low, 10^high). 예를 들어, 다음 코드(약간 극단적인 예)에서 틱은 다음과 같이 전체 숫자로 표시됩니다.np.logspace(0,100)[-1] < 10**101참입니다.

plt.plot(np.logspace(0, 8), np.logspace(0, 100));
plt.ticklabel_format(scilimits=(0, 101))

result2

언급URL : https://stackoverflow.com/questions/28371674/prevent-scientific-notation

반응형