一些成指数变化的数据,在图表中需要使用对数坐标轴显示。QChart提供列QLogValueAxis来实现对数坐标轴。
QLogValueAxis
QLogValueAxis类将对数刻度添加到图表的坐标轴。对数刻度是基于数量级的非线性刻度,因此轴上的每个刻度线都是前一个刻度线乘以一个值。
注意: 如果图表序列中的有小于或等于0的值,则不会绘制该图表序列。
QLogValueAxis常用函数:
- setBase(self,base):设置对数坐标轴的底数,该值必须大于0,且不能等于1。
- setLabelFormat(self, format):设置为坐标轴创建标签时使用的格式字符串。
- setMax(self, max):设置坐标轴的最大值。
- setMin(self, min):设置坐标轴的最小值。
- setRange(self, min, max):设置坐标轴值的范围。
- setMinorTickCount(self, count):设置坐标轴上次刻度线的数量。
QLogValueAxis常用信号:
- baseChanged(self, base): 当由base指定的坐标轴底数发生了改变,将发出此信号。
- labelFormatChanged(self, format):当由format指定的坐标轴标签使用的显示格式发生了改变,将发出此信号。
- maxChanged(self, max):当max指定坐标轴的最大值发生了变化,将发出此信号。
- minChanged(self, min):当由min指定坐标轴的最小值发生了变化,将发出此信号。
- rangeChanged(self, min, max):当由min和max指定的坐标轴的最大值或最小值发生了改变,将发出此信号。
- minorTickCountChanged(self, minorTickCount):当由minorTickCount指定的坐标轴上的次刻度线数量改变时,将发出此信号。
- tickCountChanged(self, tickCount):当由tickCount指定的坐标轴上的刻度线数量改变时,将发出此信号。
QLogValueAxis示例
示例显示了如何使用QLogValueAxis。 完整代码如下:
import sys
from PyQt5.QtCore import Qt, QPointF
from PyQt5.QtGui import QPainter
from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox
from PyQt5.QtChart import QChart, QChartView, QLineSeries, QLogValueAxis, QValueAxis
class DemoLogValueAxis(QMainWindow):
def __init__(self, parent=None):
super(DemoLogValueAxis, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战 Qt for Python: 对数值坐标轴演示')
# 设置窗口大小
self.resize(480, 360)
self.createChart()
def createChart(self):
#设置折线数据
lineSeries = QLineSeries()
lineSeries.append(QPointF(1.0, 1.0))
lineSeries.append(QPointF(2.0, 73.0))
lineSeries.append(QPointF(3.0, 268.0))
lineSeries.append(QPointF(4.0, 17.0))
lineSeries.append(QPointF(5.0, 4325.0))
lineSeries.append(QPointF(6.0, 723.0))
#创建图表
chart = QChart()
chart.legend().hide()
chart.addSeries(lineSeries)
chart.setTitle('对数值坐标示例')
#坐标轴
axisX = QValueAxis()
axisX.setLabelFormat('%i')
axisX.setTitleText('数据点')
axisX.setTickCount(len(lineSeries))
chart.addAxis(axisX, Qt.AlignBottom)
lineSeries.attachAxis(axisX)
axisY = QLogValueAxis() #对数值坐标
axisY.setLabelFormat('%g')
axisY.setTitleText('值')
axisY.setBase(8.0)
axisY.setMinorTickCount(-1)
chart.addAxis(axisY, Qt.AlignLeft)
lineSeries.attachAxis(axisY)
#图表视图
chartView = QChartView(chart)
chartView.setRenderHint(QPainter.Antialiasing)
self.setCentralWidget(chartView)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoLogValueAxis()
window.show()
sys.exit(app.exec())
运行结果如下图:
本文知识点
- 了解QLogValueAxis, 使用对数坐标的图标序列的值不能小于或等于0。
- 如何在图表中使用对数坐标轴。
请多多关注,评论,收藏,点赞,和转发。