2017-11-26 15 views
1

정수 일지라도 소수점이 모두있는 축 레이블을 얻으려고합니다. 아래 그림을 참조하십시오.Pyqtgraph 소수점을 사용하는 강제 축 레이블

enter image description here

당신은 값이 정수 때마다, 더 이상 진수를 표시, x 축에 그것을 느끼지 못할 것입니다. 나는 "1.0"을 읽으려는 "1"을 원합니다.

플롯 스타일을 설정하는 방법이 있습니다. 그것은이

Plotstyle1

def set_plotstyle(p1, style): 
    if style == 1: 
     axlabel_font = QtGui.QFont() 
     axlabel_font.setPixelSize(20) 

     p1.showAxis('right') 
     p1.showAxis('top') 

     p1.showLabel('right', show=False) 
     p1.showLabel('top', show=False) 

     p1.showGrid(x=False, y=False) 
     p1.setLogMode(x=False, y=False) 
     p1.getAxis('left').tickFont = axlabel_font 
     p1.getAxis('bottom').tickFont = axlabel_font 
     p1.getAxis('left').labelFont = axlabel_font 
     p1.getAxis('bottom').setHeight(70) 
     p1.getAxis('left').setWidth(100) 
     p1.getAxis('right').setWidth(60) 
     p1.getAxis('left').setStyle(tickTextOffset=15) 
     p1.getAxis('bottom').setStyle(tickTextOffset=15) 
     p1.getAxis('top').setStyle(showValues=False) 
     p1.getAxis('right').setStyle(showValues=False) 

가능하면 같은, 나는이 방법에서이 기능을 설정하려는 읽습니다. 감사!

답변

1

소수점 이하 한 자리에 x 및 y 값을 표시하는 예제 코드를 찾으십시오. set_plotstyle 메서드를 수정하여 플롯되는 x 및 y 값도 허용하도록했습니다. 이것은 당신이 요구 한 것이 아니지만 도움이되기를 바랍니다.

x 및 y 값은 setTicks를 사용하여 틱 값에 할당 된 형식화 된 문자열로 변환됩니다. 하나의 소수 자릿수에 대한 문자열 형식 명령은 .1f입니다. 아이디어 및 예제 코드는이 유래 응답을 기반으로합니다 값이 음모에 겹치지 않도록

PyQtGraph - How to set intervals of axis

나는 당신의 set_plotstyle 방법에 글꼴 크기를 감소.

이것은 Jupyter 노트북을 사용하여 Linux Mint에서 Python 3.6을 사용하여 테스트되었습니다. Jupyter 노트북을 사용하는 경우 % gui 인라인 매직을 사용하여 플롯을 표시하십시오.

import pyqtgraph as pg 
import numpy as np 
from pyqtgraph.Qt import QtCore, QtGui 

def set_plotstyle(p1, x_vals, y_vals, style): 
    if style == 1: 
     axlabel_font = QtGui.QFont() 
     axlabel_font.setPixelSize(15) 

     p1.showAxis('right') 
     p1.showAxis('top') 

     p1.showLabel('right', show=False) 
     p1.showLabel('top', show=False) 

     p1.showGrid(x=False, y=False) 
     p1.setLogMode(x=False, y=False) 
     p1.getAxis('left').tickFont = axlabel_font 
     p1.getAxis('bottom').tickFont = axlabel_font 
     p1.getAxis('left').labelFont = axlabel_font 
     p1.getAxis('bottom').setHeight(70) 
     p1.getAxis('left').setWidth(100) 
     p1.getAxis('right').setWidth(60) 
     p1.getAxis('left').setStyle(tickTextOffset=15) 
     p1.getAxis('bottom').setStyle(tickTextOffset=15) 
     p1.getAxis('top').setStyle(showValues=False) 
     p1.getAxis('right').setStyle(showValues=False) 

     ax = p1.getAxis('bottom') 
     dx = [(value, '{:.1f}'.format(value)) for value in x_vals] 
     ax.setTicks([dx, []]) 

     ay = p1.getAxis('left') 
     dy = [(value, '{:.1f}'.format(value)) for value in y_vals] 
     ay.setTicks([dy, []]) 
    return p1 

app = pg.mkQApp() 

pw = pg.PlotWidget(title="Example") 
x = np.arange(7) 
y = x**2/150 
pw.plot(x=x, y=y, symbol='o') 
pw.show() 
pw.setWindowTitle('Example') 
set_plotstyle(pw, x, y, 1) 


if __name__ == '__main__': 
    import sys 

    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'): 
    QtGui.QApplication.instance().exec_()