줄거리 틱 수 감소


160

그래프에 틱이 너무 많아 서로 닿아 있습니다.

진드기 수를 어떻게 줄일 수 있습니까?

예를 들어 진드기가 있습니다.

1E-6, 1E-5, 1E-4, ... 1E6, 1E7

그리고 나는 단지 원한다.

1E-5, 1E-3, ... 1E5, 1E7

나는을 가지고 놀았 LogLocator지만 이것을 알아낼 수 없었습니다.

답변:


266

또는 matplotlib이 틱을 배치하는 동안 틱 수를 간단히 설정하려면 (현재는으로 만 MaxNLocator) pyplot.locator_params,

pyplot.locator_params(nbins=4)

아래에서 언급 한 것처럼이 방법에서 특정 축을 지정할 수 있습니다. 기본값은 둘 다입니다.

# To specify the number of ticks on both or any single axes
pyplot.locator_params(axis='y', nbins=6)
pyplot.locator_params(axis='x', nbins=10)

27
이것은 훌륭한 제안이었으며 프로세스 를 구체적으로 지정 pyplot.locator_params(axis = 'x', nbins = 4)(또는 axis = 'y') 할 수있게함으로써 매우 간단했습니다. 감사합니다 @bgamari!
— benjaminmgross 2014

8
로그 스케일로,이와 함께 일 numticks대신nbins
— meduz

1
@ bgamari, @meduz numticks가 지적한대로 대수 플롯에 대한 솔루션을 추가 할 수 있습니까?
— Løiten

7
이것은 레이블을 원래 위치에 배치하지 않는 것 같습니다. 예를 들어, 원래 틱 레이블 인 경우 [0, 1, ..., 99]한 세트는 지금 nticks=10, 새로운 스파 스 라벨은 오랫동안 떨어져 축을 따라, 즉 지금과 같이 열 번 배치됩니다 1어디에 앉을 9이었다 2곳 19이었다 ... 그리고 9곳 99이었다.
— Vim

2
이 방법을 신뢰하기 전에 결과를 확인하십시오. @Vim이 맞습니다. 눈금 값이 잘못 배치됩니다.
— David J.

53

누군가 여전히 검색 결과에서이 페이지를 얻는 경우 :

fig, ax = plt.subplots()

plt.plot(...)

every_nth = 4
for n, label in enumerate(ax.xaxis.get_ticklabels()):
    if n % every_nth != 0:
        label.set_visible(False)

7
이것은 실제로 아무것도하지 않은 다른 모든 답변에 비해 효과적이었습니다. thanks :)
— faizan

잘 했어. 이것을 찾는 데 시간이 걸렸지 만 내가 원하는 것을했습니다.
— John

감사합니다. 이렇게하면 남아있는 레이블이 올바른 위치에있게됩니다. 이 답변을 개선하는 추가 단계는 눈금을 제거하는 것입니다.
— David J.

대단한 대답-SO 커뮤니티에 알려진 사용자 정의 방법이 없었습니다. 이것은 lib에 귀중한 추가 물입니까?
— jabberwocky

32

진드기의 사용자 정의 및 모양 문제를 해결하려면 matplotlib 웹 사이트 의 Tick ​​Locators 가이드를 참조하십시오.

ax.xaxis.set_major_locator(plt.MaxNLocator(3))

x 축의 틱 수를 3으로 설정하고 축에 균등하게 분배합니다.

이것에 대한 좋은 튜토리얼 도 있습니다


처음 3 개의 날짜 / 시간 인덱스 만 선택하십시오. pandas.DataFrame.plot에서 도끼를 얻을 때 ax = df.plot()
— Mithril

@Mithril 죄송합니다 귀하의 의견을 이해하지 못합니다. 좀 더 자세히 설명해 주시겠습니까?
— Prageeth Jayathissa

pandas.DataFrame날짜 시간 인덱스가 [2019-01-01, ... 2019-11-01] 인 df ( ) 가 있으면을 호출 ax = df.plot()하고 그림 객체를 반환하십시오. call ax.xaxis.set_major_locator(plt.MaxNLocator(3)) 은 처음 3 개의 인덱스 만 표시합니다 [2019-01-01, 2019-01-02, 2019-01-03].
— Mithril

1
@Mithril은 df.plot()종종을 표시 minor_locator하므로 시도해 볼 수 있습니다 ax1.xaxis.set_minor_locator(plt.MaxNLocator(3)). 또한 3표시하려는 진드기 수 를 대신 사용하십시오 . 팬더 import matplotlib.dates as mdatesax.xaxis.set_minor_locator(mdates.MonthLocator(interval = 1))ax.xaxis.set_minor_formatter(mdates.DateFormatter('%m-%Y'))
— 시계 시리즈의 경우

20

set_ticks()축 객체에 대한 기능이 있습니다.


4
내가 원하는 진드기를 미리 알고 있다면 이것은 효과가 있습니다. 위에서 제시 한 예는 단지 예일뿐입니다. 나는 진드기가 무엇인지 모른다. 나는 단지 그 진드기가 더 적은 것을 원한다는 것을 안다.
— jlconlin

10
axes 객체를 호출 get_xticks()하거나 get_yticks()먼저 필요에 따라 편집 한 다음 목록을 다시 전달할 수 set_ticks()있습니다.
— user812786

4
나는 없습니다 만 set_ticks(), set_xticks()그리고 set_yticks()있습니다. 이것들은 축이 아닌 좌표축 객체의 속성입니다. 아마도 이것은 지난 몇 년 동안 바뀌었을 것입니다.
— Gauthier

2
내가해야할지 잘 모르겠지만, 어떤 사람들은 귀하의 답변이있는 그대로 유용하다고 생각했습니다. 그것이 저와 다르다고해서 모든 사람에게 해당되는 것은 아닙니다.
— Gauthier

1
이 답변을 유용하게 만드는 한 가지 예가 있습니다.
— Richard

10

누군가가 여전히 그것을 필요로하고 여기에 실제로 아무것도 효과가 없었기 때문에 생성 된 줄거리의 모양을 "있는 그대로"유지하면서 틱 수를 정확히 N으로 고정하는 매우 간단한 방법을 생각해 냈습니다.

import numpy as np
import matplotlib.pyplot as plt

f, ax = plt.subplots()
ax.plot(range(100))

ymin, ymax = ax.get_ylim()
ax.set_yticks(np.round(np.linspace(ymin, ymax, N), 2))

2
float 대신 int로 값을 반환하기 위해 마지막 줄을 약간 수정해야했습니다.ax.set_yticks(np.linspace(int(ymin), int(ymax), N), 2)
— Nick Settje

@NickSettje는 여전히 나와 함께 떠 있습니다!
— Mohd

4

@raphael이 준 솔루션은 간단하고 매우 유용합니다.

여전히 표시된 눈금 레이블은 원래 분포에서 샘플링 된 값이 아니라에서 반환 한 배열 의 인덱스 에서 샘플링 된 값 np.linspace(ymin, ymax, N)입니다.

원래 눈금 레이블과 간격을두고 N 값을 표시하려면이 set_yticklabels()방법을 사용하십시오 . 다음은 정수 레이블이있는 y 축 스 니펫입니다.

import numpy as np
import matplotlib.pyplot as plt

ax = plt.gca()

ymin, ymax = ax.get_ylim()
custom_ticks = np.linspace(ymin, ymax, N, dtype=int)
ax.set_yticks(custom_ticks)
ax.set_yticklabels(custom_ticks)

이 멋진 조정에 대한 명성!
— Mohd

2

로그 스케일을 사용하는 경우 다음 명령으로 주요 틱 수를 수정할 수 있습니다

import matplotlib.pyplot as plt

....

plt.locator_params(numticks=12)
plt.show()

numticks표시 할 축 눈금 수 를 결정하도록 설정된 값입니다 .

locator_params()함수 소개에 대해서는 @bgamari의 게시물에 기록 하지만 nticks로그 스케일을 사용 하면 매개 변수에서 오류가 발생합니다.


질문과 대답은 즉, 이전하기 matplotlib 1이고, 당신은 2를 참조하고
— DAWID Laszuk
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.