[PYTHON] matplotlib에 두 번째 x 축을 추가하는 방법
PYTHONmatplotlib에 두 번째 x 축을 추가하는 방법
나는 아주 간단한 질문이있다. 내 플롯에서 두 번째 x 축을 가져야하고이 축에 첫 번째 축의 특정 위치에 해당하는 특정 수의 틱이 있어야합니다.
예를 들어 보겠습니다. 여기서 암흑 물질 질량을 1 / (1 + z)로 정의 된 확장 인자의 함수로 플롯하고 있는데, 0에서 1까지의 범위입니다.
semilogy(1/(1+z),mass_acc_massive,'-',label='DM')
xlim(0,1)
ylim(1e8,5e12)
내 플롯 상단에 확장 요소의 일부 값에 해당하는 z를 표시하는 다른 x 축을 가져야합니다. 그게 가능하니? 그렇다면 xtics ax를 어떻게 가질 수 있습니까?
해결법
-
==============================
1.@ Dhara의 답변에있는 주석에서 큐를 가져오고 있습니다. 예전 X 축에서 새 X 축까지의 함수에 의해 new_tick_locations 목록을 설정하려는 것 같습니다. 아래의 tick_function은 numpy 배열을 사용하여 새로운 값으로 매핑하고 형식을 지정합니다.
@ Dhara의 답변에있는 주석에서 큐를 가져오고 있습니다. 예전 X 축에서 새 X 축까지의 함수에 의해 new_tick_locations 목록을 설정하려는 것 같습니다. 아래의 tick_function은 numpy 배열을 사용하여 새로운 값으로 매핑하고 형식을 지정합니다.
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twiny() X = np.linspace(0,1,1000) Y = np.cos(X*20) ax1.plot(X,Y) ax1.set_xlabel(r"Original x-axis: $X$") new_tick_locations = np.array([.2, .5, .9]) def tick_function(X): V = 1/(1+X) return ["%.3f" % z for z in V] ax2.set_xlim(ax1.get_xlim()) ax2.set_xticks(new_tick_locations) ax2.set_xticklabels(tick_function(new_tick_locations)) ax2.set_xlabel(r"Modified x-axis: $1/(1+X)$") plt.show()
-
==============================
2.twiny를 사용하여 2 개의 x 축 스케일을 만들 수 있습니다. 예 :
twiny를 사용하여 2 개의 x 축 스케일을 만들 수 있습니다. 예 :
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) ax2 = ax1.twiny() a = np.cos(2*np.pi*np.linspace(0, 1, 60.)) ax1.plot(range(60), a) ax2.plot(range(100), np.ones(100)) # Create a dummy plot ax2.cla() plt.show()
참고 : http://matplotlib.sourceforge.net/faq/howto_faq.html#multiple-y-axis-scales
산출:
-
==============================
3.Dhara의 답변에 대한 귀하의 질문에 대답 : "나는 두 번째 x 축에 이러한 틱을 원합니다 : (7,8,99) x 축 위치 10, 30, 40에 해당합니다. 어떤 방법으로 가능합니까?" 예, 그렇습니다.
Dhara의 답변에 대한 귀하의 질문에 대답 : "나는 두 번째 x 축에 이러한 틱을 원합니다 : (7,8,99) x 축 위치 10, 30, 40에 해당합니다. 어떤 방법으로 가능합니까?" 예, 그렇습니다.
import numpy as np import matplotlib.pyplot as plt fig = plt.figure() ax1 = fig.add_subplot(111) a = np.cos(2*np.pi*np.linspace(0, 1, 60.)) ax1.plot(range(60), a) ax1.set_xlim(0, 60) ax1.set_xlabel("x") ax1.set_ylabel("y") ax2 = ax1.twiny() ax2.set_xlabel("x-transformed") ax2.set_xlim(0, 60) ax2.set_xticks([10, 30, 40]) ax2.set_xticklabels(['7','8','99']) plt.show()
당신은 얻을 것이다:
-
==============================
4.상단 축이 하단 축의 틱 값의 함수가되도록하려면 :
상단 축이 하단 축의 틱 값의 함수가되도록하려면 :
import matplotlib.pyplot as plt fig, ax1 = plt.subplots() ax1 = fig.add_subplot(111) ax1.plot(range(5), range(5)) ax1.grid(True) ax2 = ax1.twiny() ax1Xs = ax1.get_xticks() ax2Xs = [] for X in ax1Xs: ax2Xs.append(X * 2) ax2.set_xticks(ax1Xs) ax2.set_xbound(ax1.get_xbound()) ax2.set_xticklabels(ax2Xs) title = ax1.set_title("Upper x-axis ticks are lower x-axis ticks doubled!") title.set_y(1.1) fig.subplots_adjust(top=0.85) fig.savefig("1.png")
제공 :
-
==============================
5.나는 평판이 낮아 논평 대신 답을 써야한다. 나는 Matteo와 비슷한 문제가 있었다. 차이점은 내 첫 번째 x 축에서 두 번째 x 축까지의지도가 없었으며 x 값만 나타났습니다. 그래서 두 번째 x 축에 데이터를 직접 설정하고 틱 (tick)이 아닌 원하는 축을 설정하려고합니다. 그러나 axes.set_xdata는 없습니다. Dhara의 답변을 수정하여이 작업을 수행 할 수있었습니다.
나는 평판이 낮아 논평 대신 답을 써야한다. 나는 Matteo와 비슷한 문제가 있었다. 차이점은 내 첫 번째 x 축에서 두 번째 x 축까지의지도가 없었으며 x 값만 나타났습니다. 그래서 두 번째 x 축에 데이터를 직접 설정하고 틱 (tick)이 아닌 원하는 축을 설정하려고합니다. 그러나 axes.set_xdata는 없습니다. Dhara의 답변을 수정하여이 작업을 수행 할 수있었습니다.
ax2.lines = []
사용하는 대신:
ax2.cla()
사용 중에도 ax1에서 내 음모를 삭제했습니다.
from https://stackoverflow.com/questions/10514315/how-to-add-a-second-x-axis-in-matplotlib by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] 파일이 비어 있는지 확인하는 방법? (0) | 2018.10.06 |
---|---|
[PYTHON] 살아있는 파이썬 urllib2 (0) | 2018.10.06 |
[PYTHON] 파이썬에서 파일로부터 문자 읽기 (0) | 2018.10.06 |
[PYTHON] 파이썬에서 객체 속성 반복하기 (0) | 2018.10.06 |
[PYTHON] 파이썬 소켓은 많은 양의 데이터를받습니다. (0) | 2018.10.06 |