绘图核心代码
import numpy as np
import pandas as pd
import matplotlib
matplotlib.use("Qt5Agg") # 声明使用QT5
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib import pyplot as plt #导入模块
class MyFigure(FigureCanvas): # 通过继承FigureCanvas类,使得该类既是一个PyQt5的Qwidget,又是一个matplotlib的FigureCanvas,这是连接pyqt5与matplot lib的关键
def __init__(self):
self.fig = Figure()#第一步:创建一个创建Figure
super(MyFigure,self).__init__(self.fig) #第二步:在父类中激活Figure窗口
def plotscatter(self,plot_df):
if isinstance(plot_df,pd.Series): #如是series,无法用df.shape[1]判断
x=np.array(plot_df.index)
y=np.array(plot_df)
else:
x = np.array(plot_df['name0'])
y = np.array(plot_df['name1'])
self.axes = self.fig.add_subplot(111) #在Figure窗口创建一个子图,用于绘制图形用
self.axes.plot(x,y)
1.单列散点
以pd的index为横轴x值,单列散点值为y值
(1)问题:传入plot_df这时实际上是个series,不能用plot_df[0]表达pd的列的模式
(2)问题:x=np.array(plot_df.index)可以直接当list或series用,直接用,如果要把index转成list用,可以先:
temp_list=plot_df.index.tolist()
当然list还可以转成series
temp_s=pd.Series(temp_list)
最简单是直接用index
x=np.array(plot_df.index)
2.任意两列
当pd还是pd时,可以根据列名确定绘图的x,y
也可以直接用:
x = np.array(plot_df['name0'])
y = np.array(plot_df['name1'])