Reputation: 53
I wanna create plot using matplotlib
in QTdesigner
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
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,...
I have done create plot using dataframe.plot()
but without qtdesigner and matplotlib with this code
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
My question How to manipulate the matlpotlib xticks become similar with second figure ?
Upvotes: 1
Views: 225
Reputation: 243975
You can pass the axes to the plot() method:
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())
Upvotes: 1