xmgrace로 그림 그리기(두 개의 그래프들을 겹쳐 그리기) by 바죠


xmgrace로 그림 그리기(두 개의 그래프들을 겹쳐 그리기)

아래와 같은 두 개의 데이터 셋이 있을 때 xmgrace에서 2단으로 그릴 수 있다.
이것은 Edit  Arrange graphs에서 입력(2 rows 1 column) 을 넣어 줄 수 있다.
각각의 graph는  해당 그래프를 마우스로 클릭한 다음 Data--> import를 통해서 데이터을 입력하고 graph 각각을 완성할 수 있다.
 
만약 각각의 그래프를 겹쳐 그리고 싶다면 tick marks, tick labels을 한쪽으로 분리할 필요가 있다. 
normal side(좌측), opposite side(우측)을 사용해서 양쪽으로 분리한다. 이때, both sides(양측)옵션을 각각의 graph에서 동시에 포기한다.

그림이 잘 읽혀지도록 색으로 분리를 할 수 있다. 이 작업이  완료된 다음
Edit  Overlay graphs를 활용하여 두 개의 graphs를 겹쳐서 그릴 수 있다.

테스트를 위해서 아래와 같은 인위적인 데이터들을 만들어 보았다. 스케일이 다른 두 가지 데이터들이다.  붉은 데이터는 오른쪽 눈금(opposite)으로 읽고 검은색 데이터는 좌측 눈금(normal)으로 읽는다.

-------------------------------
cat aa
 1.  11.4
2.  12.7
3.  13.1
4.  14.56

  cat bb
1.   0.9
2.   2.2
3.   3.54
4.   4.0
-------------------------------

이전에는 주로 첫번째 그림 스타일로 발표를 많이 했었는데(xmgrace를 이용하지 않고 그림.), 다음에는 두번째 스타일로 발표를 한 번 해 보고 싶다.  인위적인 postscript 프로그램을 통해서 사람들이 그림을 그리는 줄 알았다. 하지만, 엄연히 xmgrace에서 지원이 되는 그림 그리기 초식이다. 그동안 나는 이사실을 모르고 지냈었다는 것이다. 최근 논문을 읽다가 이렇게 그리는 것이 조금 더 멋있어 보여서 한 번 더 xmgrace를 찾아 본것이다.  최근 많은 논문들이 컬러 그림을 무료로 지원하고 있다. 적어도 온라인 컬러 그림에 대한 지원은 그렇다고 볼 수 있다. 좀 더 멋있는 그래들을 만들어야 할 것 같다. 보기 좋은 떡이 맛도 있다는 설이 있다.  


참고:
http://incredible.egloos.com/2657517
http://incredible.egloos.com/4120474
http://epb.lbl.gov/xfig/
http://incredible.egloos.com/3632688

-------------------------------
기초적인 xmgrace 사용법

먼저 데이터를 준비한다.
1.   11.
2.   13.
3.    22.
처럼 데이터를 파일에 저장한다. 이 경우는 "XY" Set type이라고 부른다.
이러한 데이터 셋을 하나더 같은 파일에 넣어 줄 수 있다.
이 경우 문자 "&"를 사용하여 독립적인 데이터 셋을 서로 다르게 분리 취급할 수 있다.

아래와 같이 하면 두 가지 데이터 셋들을 하나의 파일에 담아 둘 수 있다.

1.   11.
2.   13.
3.    22.
&
1.    11.4
2.   13.3
3.    22.9

아래와 같이 문자 "#"을 사용하여 코멘트로 사용할 수 있다. 이 문자로 시작하는 라인은 xmgrace가 데이터로 인식하지 않는다.

# first set
1.   11.
2.   13.
3.    22.
&
# second set
1.    11.4
2.   13.3
3.    22.9

다시말해서 프로그래머가 "#", "&"의 용도를 활용할 수 있다. 프로그래머는 프로그램이 보기 좋게 데이터를 정리해서 만들 수 있다.

xmgrace &와 같이 먼저 프로그램을 실행한다. 이 때 새로운 창이 열린다. 
(xmgrace aa.dat 처럼 직접 데이터 파일과 함께 직접 프로그램을 부를수도 있다.)
(xmgrace aa.dat bb.dat 처럼 연속해서 두 개의 데이터 파일을 부를수도 있다.)

Data  Import  ASCII   (파일속의 데이터를 직접 불러들인다.)
새로운 창이 열린다.
Set type 에서 하나를 선택한다.
XY  (일반적인 x-y 형식의 데이터 자료형이라고 볼 수 있다.)
XYDY  (y 축에 에러바가 있을 경우)
자료를 포함하는 파일 이름을 직접 입력한다.

Plot  Axis properties (그래프의 축들에 대한 세부사항들을 직접 입력하여 설정한다.)
새로운 창이 열린다.
X axis
Y axis
각각에 대해서 독립적으로 모든 셋팅을 변화시켜준다.


Plot  set  오른쪽 마우스 클릭
데이터만 지울 수 있다. 그림 그리는 형식은 지우지 않는다.  Kill data set
형식, 데이터 모두를 지울 수 있다.  Kill

Plot   Set appearance  (데이터들을 그래프에서 원하는 방식으로 표현한다.)
새로운 창이 열린다.
각 데이터 셋에 대해서 표현방식을 선택한다. 데이터 셋이 한개가 아닌경우, Select set에서 원하는 데이터를 클리하여 선택한 다음에 그 데이터의 표현방식을 직접 바꿀 수 있다.

Plot  Set appearance  Line  Fill properties :  "To baseline"
특정 데이터 라인(라인으로 연결하고 이를 선택한 다음에 작업을 수행한다.) 이하를 다른 패턴/색으로 채워넣기를 수행할 수 있다. 

Plot → Graph appearance (틀, 레전드, 레전드 박스 등을 임의로 조절할 수 있다.)

Plot  Plot appearance (페이지 백그라운드 색상 조정을 할 수 있다.)

File  Print setup  (그림으로 저장한다.)
새로운 창이 열린다.
출력 양식을 바꾸어준다. (Device)  PNG, SVG, EPS가 널리 사용되는 방식이다.
File  Print로 출력을 한다.

-------------------------------




참고: matplotlib, python
http://incredible.egloos.com/3632688


PS.
distance (\cE\C)
위의 것은 거리 단위인 옹스트롬을 xmgrace에서 표현한 예이다.



---------------------------------------------------------------------------------------------------------------------
import numpy as np
import matplotlib.pyplot as plt

# Create some mock data
t = np.arange(0.01, 10.0, 0.01)
data1 = np.exp(t)
data2 = np.sin(2 * np.pi * t)

fig, ax1 = plt.subplots()

color = 'tab:red'
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp', color=color)
ax1.plot(t, data1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.set_ylabel('sin', color=color)  # we already handled the x-label with ax1
ax2.plot(t, data2, color=color)
ax2.tick_params(axis='y', labelcolor=color)

fig.tight_layout()  # otherwise the right y-label is slightly clipped
plt.show()


---------------------------------------------------------------------------------------------------------------------
import matplotlib.pyplot as plt
from matplotlib.collections import EventCollection
import numpy as np
from matplotlib.ticker import AutoMinorLocator

# Fixing random state for reproducibility
np.random.seed(19680801)

# create random data
xdata = np.random.random([2, 10])

# split the data into two parts
xdata1 = xdata[0, :]
xdata2 = xdata[1, :]

# sort the data so it makes clean curves
xdata1.sort()
xdata2.sort()

# create some y data points
ydata1 = xdata1 ** 2
ydata2 = 1 - xdata2 ** 3

# plot the data
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax.plot(xdata1, ydata1, color='tab:blue')
ax.plot(xdata2, ydata2, color='tab:orange')

ax.grid()
ax.xaxis.set_minor_locator(AutoMinorLocator())
ax.yaxis.set_minor_locator(AutoMinorLocator())
# create the events marking the x data points
xevents1 = EventCollection(xdata1, color='tab:blue', linelength=0.05)
xevents2 = EventCollection(xdata2, color='tab:orange', linelength=0.05)

# create the events marking the y data points
yevents1 = EventCollection(ydata1, color='tab:blue', linelength=0.05, orientation='vertical')
yevents2 = EventCollection(ydata2, color='tab:orange', linelength=0.05, orientation='vertical')

# add the events to the axis
#ax.add_collection(xevents1)
#ax.add_collection(xevents2)
#ax.add_collection(yevents1)
#ax.add_collection(yevents2)

# set the limits
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])

ax.set_title('line plot with data points')
ax.set_xlabel('x')
ax.set_ylabel('y')

# display the plot
plt.show()
---------------------------------------------------------------------------------------------------------------------


"""
===========================
Plots with different scales
===========================

Demonstrate how to do two plots on the same axes with different left and
right scales.

The trick is to use *two different axes* that share the same *x* axis.
You can use separate `matplotlib.ticker` formatters and locators as
desired since the two axes are independent.

Such axes are generated by calling the `Axes.twinx` method.  Likewise,
`Axes.twiny` is available to generate axes that share a *y* axis but
have different top and bottom scales.

The twinx and twiny methods are also exposed as pyplot functions.

"""

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoMinorLocator

fig, ax1 = plt.subplots()
t = np.arange(0.01, 10.0, 0.01)
s1 = np.exp(t)
ax1.plot(t, s1, 'b-')
ax1.set_xlabel('time (s)')
# Make the y-axis label, ticks and tick labels match the line color.
ax1.set_ylabel('exp', color='b')
ax1.tick_params('y', colors='b')

ax1.grid()
ax1.xaxis.set_minor_locator(AutoMinorLocator())
ax1.yaxis.set_minor_locator(AutoMinorLocator())

ax2 = ax1.twinx()
s2 = np.sin(2 * np.pi * t)
ax2.plot(t, s2, 'r.')
ax2.set_ylabel('sin', color='r')
ax2.tick_params('y', colors='r')
#ax2.grid()
#ax2.xaxis.set_minor_locator(AutoMinorLocator())
#ax2.yaxis.set_minor_locator(AutoMinorLocator())

fig.tight_layout()
plt.show()
---------------------------------------------------------------------------------------------------------------------


핑백

덧글

  • 바죠 2017/07/05 14:55 # 답글

    distance (\c\E\C)

    옹스트롬을 xmgrace에서 표현한 예
  • 바죠 2011/05/30 16:10 # 답글

    f{Symbol}af{Times}-helix

    alpha-helix를 표현하기 위해서 위와 같은 방식을 활용했다.

    Greek, Times로 폰트를 바꿔어서 사용할 수 있다.

  • 바죠 2012/05/23 15:14 # 답글

    theta_c (degree)

    x qf{}scN(degree)

  • 301-140 2012/11/23 17:29 # 삭제 답글

    감사합니다. 두 개의 다른 y축을 xmgrace에서 한꺼번에 나타내는 그림 그리는 방법을 찾고 있었습니다.
    아직 그리는 중이지만, 정말 많은 도움이 되었습니다.
    앞으로도 좋은 정보 공유 부탁드립니다. 감사합니다. ^^
  • 바죠 2019/05/28 09:35 # 답글

    https://matplotlib.org/gallery/subplots_axes_and_figures/two_scales.html#sphx-glr-gallery-subplots-axes-and-figures-two-scales-py
  • 바죠 2019/10/20 15:23 # 답글

    https://matplotlib.org/gallery/api/two_scales.html
  • 바죠 2020/04/04 10:16 # 답글

    Gamma --> \x G\f{}

    \o X\O --> X bar
댓글 입력 영역

최근 포토로그