파이썬이 데이터를 플롯하는 방법을 수정하려고합니다.
말하다
x = [0,5,9,10,15]
과
y = [0,1,2,3,4]
그런 다음 할 것입니다 :
matplotlib.pyplot.plot(x,y)
matplotlib.pyplot.show()
x 축의 눈금은 5 간격으로 표시됩니다. 1 간격을 표시하는 방법이 있습니까?
답변
다음과 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()
답변
다른 방법은 축 로케이터를 설정하는 것입니다.
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 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])
답변
이것은 약간 해킹이지만, 내가 찾은 예제를 이해하는 것이 가장 깨끗하고 쉽습니다. 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)
답변
이것은 오래된 주제이지만, 나는 이것을 때때로 우연히 발견 하고이 기능을 만들었습니다. 매우 편리합니다 :
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()