파이썬이 데이터를 플롯하는 방법을 수정하려고합니다.
말하다
x = [0,5,9,10,15]
과
y = [0,1,2,3,4]
그런 다음 할 것입니다 :
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x 축의 눈금은 5 간격으로 표시됩니다. 1 간격을 표시하는 방법이 있습니까?
pyplot.locator_params(nbins=4)
파이썬이 데이터를 플롯하는 방법을 수정하려고합니다.
말하다
x = [0,5,9,10,15]
과
y = [0,1,2,3,4]
그런 다음 할 것입니다 :
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x 축의 눈금은 5 간격으로 표시됩니다. 1 간격을 표시하는 방법이 있습니까?
pyplot.locator_params(nbins=4)
답변:
다음과 plt.xticks
같이 표시를 할 위치를 명시 적으로 설정할 수 있습니다 .
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
예를 들어
import numpy as np
import matplotlib.pyplot as plt
x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(np.arange(min(x), max(x)+1, 1.0))
plt.show()
( np.arange
파이썬보다는 사용 된 range
경우를 대비 기능을 min(x)
하고 max(x)
있다은의 int 대신 수레.)
plt.plot
(또는 ax.plot
) 기능이 자동으로 기본 설정됩니다 x
및 y
제한. 이러한 제한을 유지하고 눈금 표시의 단계를 변경하려면 ax.get_xlim()
Matplotlib이 이미 설정 한 제한을 찾는 데 사용할 수 있습니다 .
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, stepsize))
기본 틱 포맷터는 틱 값을 상당한 수의 유효 자릿수로 반올림하는 적절한 작업을 수행해야합니다. 그러나 형식을보다 세밀하게 제어하려면 고유 한 형식기를 정의 할 수 있습니다. 예를 들어
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
실행 가능한 예제는 다음과 같습니다.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
start, end = ax.get_xlim()
ax.xaxis.set_ticks(np.arange(start, end, 0.712123))
ax.xaxis.set_major_formatter(ticker.FormatStrFormatter('%0.1f'))
plt.show()
+1
in plt.xticks(np.arange(min(x), max(x)+1, 1.0))
이 필요합니다.
np.arange(start, stop)
의 값 생성 반 개방 구간 [start, stop)
을 포함 start
하지만, 제외를 stop
. 그래서 나는 max(x)+1
그것이 max(x)
포함 되도록 보장했습니다 .
plt.xticks(np.arange(min(dates), max(dates)+0.1,0.1)
있습니까? 그것은 올해의 음모를
다른 방법은 축 로케이터를 설정하는 것입니다.
import matplotlib.ticker as plticker
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
필요에 따라 여러 유형의 로케이터가 있습니다.
전체 예는 다음과 같습니다.
import matplotlib.pyplot as plt
import matplotlib.ticker as plticker
x = [0,5,9,10,15]
y = [0,1,2,3,4]
fig, ax = plt.subplots()
ax.plot(x,y)
loc = plticker.MultipleLocator(base=1.0) # this locator puts ticks at regular intervals
ax.xaxis.set_major_locator(loc)
plt.show()
matplotlib.dates.AutoDateLocator()
base=1.0
실제로 무엇을 의미합니까?
나는이 솔루션을 좋아한다 ( Matplotlib Plotting Cookbook에서 ) :
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
x = [0,5,9,10,15]
y = [0,1,2,3,4]
tick_spacing = 1
fig, ax = plt.subplots(1,1)
ax.plot(x,y)
ax.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.show()
이 솔루션은에 주어진 숫자를 통해 틱 간격을 명시 적으로 제어하고 ticker.MultipleLocater()
자동 한계 결정을 허용하며 나중에 쉽게 읽을 수 있습니다.
일반 원 라이너에 관심이있는 사람은 현재 틱을 가져 와서 다른 모든 틱을 샘플링하여 새 틱을 설정하는 데 사용하십시오.
ax.set_xticks(ax.get_xticks()[::2])
ax.set_xticks([tick for tick in ax.get_xticks() if tick % 1 == 0])
이것은 약간 해킹이지만, 내가 찾은 예제를 이해하는 것이 가장 깨끗하고 쉽습니다. SO에 대한 답변에서 온 것입니다.
matplotlib colorbar에서 모든 n 번째 눈금 레이블을 숨기는 가장 깨끗한 방법은 무엇입니까?
for label in ax.get_xticklabels()[::2]:
label.set_visible(False)
그런 다음 원하는 밀도에 따라 레이블을 보이게 설정하거나 표시하지 않도록 설정할 수 있습니다.
편집 : 때로는 matplotlib가 labels ==을 설정 ''
하므로 레이블이 없거나 실제로 표시되지 않을 때 레이블이없는 것처럼 보일 수 있습니다. 실제 보이는 레이블을 반복하려면 다음을 시도하십시오.
visible_labels = [lab for lab in ax.get_xticklabels() if lab.get_visible() is True and lab.get_text() != '']
plt.setp(visible_labels[::2], visible=False)
ax.get_xticklabels()[1::2]
레이블을 숨 깁니다.
''
있기 때문에 그것들을 반복 할 때 보이지 않는 비어있는 xticklabels를 만들고 있습니다 (시각화에는 영향을 미치지 않지만 당신이 당기지 않을 수도 있음을 의미 할 수 있습니다) 올바른 라벨). 당신은 시도 할 수 있습니다 : vis_labels = [label for label in ax.get_xticklabels() if label.get_visible() is True]; plt.setp(vis_labels[::2], visible==False)
이것은 오래된 주제이지만, 나는 이것을 때때로 우연히 발견 하고이 기능을 만들었습니다. 매우 편리합니다 :
import matplotlib.pyplot as pp
import numpy as np
def resadjust(ax, xres=None, yres=None):
"""
Send in an axis and I fix the resolution as desired.
"""
if xres:
start, stop = ax.get_xlim()
ticks = np.arange(start, stop + xres, xres)
ax.set_xticks(ticks)
if yres:
start, stop = ax.get_ylim()
ticks = np.arange(start, stop + yres, yres)
ax.set_yticks(ticks)
이와 같이 진드기를 제어하는 한 가지주의 사항은 추가 된 라인 이후에 더 이상 최대 스케일의 대화식 자동 업데이트를 즐기지 않는다는 것입니다. 그런 다음
gca().set_ylim(top=new_top) # for example
resadjust 기능을 다시 실행하십시오.
우아한 솔루션을 개발했습니다. X 축과 X의 각 점에 대한 레이블 목록이 있다고 가정하십시오.
예:import matplotlib.pyplot as plt
x = [0,1,2,3,4,5]
y = [10,20,15,18,7,19]
xlabels = ['jan','feb','mar','apr','may','jun']
'feb'와 'jun'에 대해서만 진드기 레이블을 표시한다고 가정 해 봅시다.
xlabelsnew = []
for i in xlabels:
if i not in ['feb','jun']:
i = ' '
xlabelsnew.append(i)
else:
xlabelsnew.append(i)
좋습니다. 이제 가짜 레이블 목록이 있습니다. 먼저 원본 버전을 플로팅했습니다.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabels,rotation=45)
plt.show()
이제 수정 된 버전입니다.
plt.plot(x,y)
plt.xticks(range(0,len(x)),xlabelsnew,rotation=45)
plt.show()
다음은 양수, 음수 또는 혼합 값으로 숫자 시리즈 (int 또는 float)를 처리하고 원하는 단계 크기를 지정할 수있는 원하는 기능의 순수한 파이썬 구현입니다.
import math
def computeTicks (x, step = 5):
"""
Computes domain with given step encompassing series x
@ params
x - Required - A list-like object of integers or floats
step - Optional - Tick frequency
"""
xMax, xMin = math.ceil(max(x)), math.floor(min(x))
dMax, dMin = xMax + abs((xMax % step) - step) + (step if (xMax % step != 0) else 0), xMin - abs((xMin % step))
return range(dMin, dMax, step)
# Negative to Positive
series = [-2, 18, 24, 29, 43]
print(list(computeTicks(series)))
[-5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45]
# Negative to 0
series = [-30, -14, -10, -9, -3, 0]
print(list(computeTicks(series)))
[-30, -25, -20, -15, -10, -5, 0]
# 0 to Positive
series = [19, 23, 24, 27]
print(list(computeTicks(series)))
[15, 20, 25, 30]
# Floats
series = [1.8, 12.0, 21.2]
print(list(computeTicks(series)))
[0, 5, 10, 15, 20, 25]
# Step – 100
series = [118.3, 293.2, 768.1]
print(list(computeTicks(series, step = 100)))
[100, 200, 300, 400, 500, 600, 700, 800]
import matplotlib.pyplot as plt
x = [0,5,9,10,15]
y = [0,1,2,3,4]
plt.plot(x,y)
plt.xticks(computeTicks(x))
plt.show()
x 축의 정수 값은 모두 5로 균일 한 간격을 유지하지만 y 축의 간격이 다릅니다 ( matplotlib
틱이 지정되지 않았기 때문에 기본 동작).