【问题标题】:How to add subplots in QtCharts?如何在 QtCharts 中添加子图?
【发布时间】:2020-05-07 12:50:51
【问题描述】:

我需要创建两个图(子图,同步)并设置如下维度:

  • 上图是输出面积的75%
  • 下图是输出区域高度的 25%。

类似于这个草图。

一个图表很容易创建(代码如下)。但是要添加第二个子图 - 它不起作用。我尝试通过 QVBoxLayout() 添加它,但也失败了。

我找到了一个需要的示例,How to create Subplot using QCharts?,但它不是用 Python 编写的(这在尝试转换为 Python 时会导致麻烦)。这里https://doc.qt.io/qt-5/qchart.html#chartType-prop 也不存在,Python 中也不存在。

如何添加子图并指示尺寸(以像素或百分比为单位)?

from random import uniform
from PyQt5.QtWidgets import QApplication, QMainWindow
import sys
from PyQt5.QtChart import QChart, QChartView, QLineSeries



class Window(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setGeometry(100, 100, 680, 500)
        self.create_linechart()
        self.show()

    def create_linechart(self):

        series = QLineSeries(self)
        for i in range(100):
            series.append(i, uniform(0, 10))

        chart = QChart()
        chart.addSeries(series)
        chart.createDefaultAxes()
        chartview = QChartView(chart)
        self.setCentralWidget(chartview)


App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())

【问题讨论】:

    标签: python pyqt5 qtcharts qchart


    【解决方案1】:

    您必须创建 2 个 QChartView,因为在您的代码中您只创建并将其设置为 centralwidget,然后您必须使用 QWidget 作为容器并使用 QVBoxLayout 来添加它们,对于高度比,您必须设置拉伸因子:

    from random import uniform
    import sys
    
    from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget
    from PyQt5.QtChart import QChart, QChartView, QLineSeries
    
    
    class Window(QMainWindow):
        def __init__(self):
            super().__init__()
            self.setGeometry(100, 100, 680, 500)
            view1 = self.create_linechart()
            view2 = self.create_linechart()
    
            central_widget = QWidget()
            self.setCentralWidget(central_widget)
            lay = QVBoxLayout(central_widget)
            lay.addWidget(view1, stretch=3)
            lay.addWidget(view2, stretch=1)
    
        def create_linechart(self):
            series = QLineSeries()
            for i in range(100):
                series.append(i, uniform(0, 10))
    
            chart = QChart()
            chart.addSeries(series)
            chart.createDefaultAxes()
            chartview = QChartView(chart)
            return chartview
    
    
    if __name__ == "__main__":
        App = QApplication(sys.argv)
        window = Window()
        window.show()
        sys.exit(App.exec_())
    

    【讨论】:

    • 谢谢!一如既往,您拥有完美的解决方案。
    猜你喜欢
    • 2020-07-07
    • 2020-07-28
    • 2017-01-10
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 2020-12-19
    • 2012-02-13
    • 2021-01-13
    相关资源
    最近更新 更多