简体   繁体   English

如何在matplotlib中操作xticks与数据框图相同

[英]How to manipulate xticks in matplotlib same with dataframe plot

I wanna create plot using matplotlib in QTdesigner 我想在QTdesigner使用matplotlib创建图

import sys
import pandas as pd
from PyQt5 import QtCore, QtWidgets, uic
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar

Ui_MainWindow, QtBaseClass = uic.loadUiType("plot.ui")

class MyApp(QtWidgets.QMainWindow):

    def __init__(self):
        super(MyApp,self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        data = pd.DataFrame({
        'ss_time':[
            '2019-01-25 00:00:00', '2019-01-25 00:00:01', '2019-01-25 00:00:02', '2019-01-25 00:00:03', '2019-01-25 00:00:04',
        ],
        'band1':[2,4,5,6,3]
        })
        data.set_index('ss_time', inplace=True)
        df = pd.DataFrame(data, index=pd.date_range(start=data.index[0],end=data.index[-1], periods=5))
        self.ui.MplWidget.canvas.axes
        self.ui.MplWidget.canvas.axes.plot(df,marker='x')
        self.ui.MplWidget.canvas.axes.set_xticks(df.index)
        self.ui.MplWidget.canvas.draw()

if __name__ == "__main__":
    app = QtWidgets.QApplication.instance()
    if app is None:
        app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec())

Here is library for MplWidget mplwidget.py 这是MplWidget mplwidget.py的库

from PyQt5.QtWidgets import*
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure

class MplWidget(QWidget) 
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        self.canvas = FigureCanvas(Figure())
        vertical_layout = QVBoxLayout()
        vertical_layout.addWidget(self.canvas)
        self.canvas.axes = self.canvas.figure.add_subplot(111)
        self.setLayout(vertical_layout)

图片

You can see the xticks in that 1st figure is 2019,2019,... 你可以看到xticks在第一个数字是2019,2019,...

I have done create plot using dataframe.plot() but without qtdesigner and matplotlib with this code 我已经完成了使用dataframe.plot dataframe.plot()创建图,但是没有qtdesigner和matplotlib与此代码

import pandas as pd
data = pd.DataFrame({
    'ss_time':[
        '2019-01-25 00:00:00', '2019-01-25 00:00:01', '2019-01-25 00:00:02', '2019-01-25 00:00:03', '2019-01-25 00:00:04',
    ],
    'band1':[2,4,5,6,3]
    })
data.set_index('ss_time', inplace=True)
df = pd.DataFrame(data, index=pd.date_range(start=data.index[0],end=data.index[-1], periods=5))
df.plot()

And the xticks figure is what I expect xticks数字正是我所期望的

immage2

My question How to manipulate the matlpotlib xticks become similar with second figure ? 我的问题如何使matlpotlib xticks与第二个数字相似?

You can pass the axes to the plot() method: 您可以将轴传递给plot()方法:

import sys

import pandas as pd
from PyQt5 import QtCore, QtWidgets, uic

Ui_MainWindow, _ = uic.loadUiType("plot.ui")


class MyApp(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        data = pd.DataFrame(
            {
                "ss_time": [
                    "2019-01-25 00:00:00",
                    "2019-01-25 00:00:01",
                    "2019-01-25 00:00:02",
                    "2019-01-25 00:00:03",
                    "2019-01-25 00:00:04",
                ],
                "band1": [2, 4, 5, 6, 3],
            }
        )
        data.set_index("ss_time", inplace=True)
        df = pd.DataFrame(
            data,
            index=pd.date_range(start=data.index[0], end=data.index[-1], periods=5),
        )
        df.plot(ax=self.ui.MplWidget.canvas.axes)
        self.ui.MplWidget.canvas.draw() 


if __name__ == "__main__":
    app = QtWidgets.QApplication.instance()
    if app is None:
        app = QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec())

在此处输入图片说明

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM