2017-11-26 4 views
1

Ich versuche zu bekommen meine Achsenbeschriftungen haben alle Dezimalpunkte, auch wenn sie zufällig ganze Zahlen sind. Siehe das Bild unten.Pythagorative Kraftachsenbeschriftungen haben Dezimalpunkte

enter image description here

Sie werden feststellen, dass auf der x-Achse feststellen, wenn der Wert eine ganze Zahl ist, ist es nicht mehr das Dezimalsystem anzeigt. Ich möchte "1" "1.0" lesen.

Ich habe eine Methode, die meinen Plot-Stil setzt. Es liest sich so etwas wie dieses

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) 

Wenn möglich, würde ich innerhalb dieser Methode um diese Funktion setzen mögen. Vielen Dank!

Antwort

1

Nachfolgend finden Sie den Beispielcode, der die x- und y-Werte mit einer einzigen Dezimalstelle anzeigt. Ich habe die Methode set_plotstyle so geändert, dass sie auch die x- und y-Werte akzeptiert, die geplottet werden. Das ist nicht genau das, wonach Sie gefragt haben, aber ich hoffe, dass es hilft.

Die x- und y-Werte werden in formatierte Strings konvertiert, die den Tick-Werten mit setTicks zugewiesen werden. Der Stringformatbefehl für eine Dezimalstelle lautet .1f. Die Idee und Beispielcode auf dieser Stackoverflow Antwort basiert:

PyQtGraph - How to set intervals of axis

I reduzierte die Schriftgröße in Ihrer set_plotstyle Methode so, dass die Werte in der Handlung nicht überlappen.

Dies wird mit Python 3.6 unter Linux Mint mit dem Jupyter Notebook getestet. Verwenden Sie die Inline-Magie% gui, um das Diagramm anzuzeigen, wenn Sie auch ein Jupyter-Notizbuch verwenden.

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_() 
Verwandte Themen