Seaborn and Matplotlib 绘图

绘图Seaborn and Matplotlib

import numpy as np,pandas as pd
import matplotlib.pyplot as plt
import seaborn  as sns
import os
from sklearn import datasets
"""
other example :http://seaborn.pydata.org/examples/index.html
默认图片svg格式,图片不失真
"""

class Plot():
    "x,y,hue指的是DataFrame中的列名,对应下x,y,和标签值"
    def __init__(self,df,graph_name,x = None,y=None,hue=None,cmap='magma'):
        """
        :param df: DataFrame数据
        :param graph_name: 保存图片名称,默认为svg格式
        :param cmap:颜色色图
        """
        self.df = df # DataFrame格式
        self.graph_name = graph_name
        self.cmap = cmap#颜色图
        self.x = x
        self.y = y
        self.hue = hue#标签序列
        self.fdir = r'./Graph'
        if os.path.exists(self.fdir)==False:
            os.mkdir(self.fdir)
        self.fname = os.path.join(self.fdir,rf'{self.graph_name}.svg')
        plt.rcParams['font.serif'] = 'Times New Roman'#显示字体
        plt.rcParams['axes.unicode_minus'] = False#显示正负号
        plt.rcParams['font.size'] ='12'#设置字体大小

    def Heatmap(self):#热力图
        grid_kws = {"height_ratios": (.9, .05), "hspace": .3}
        f, ax = plt.subplots(2, gridspec_kw=grid_kws)
        sns.heatmap(self.df,ax=ax[0],cbar_ax=ax[1],linewidth=0.0,\
                    linecolor ='white',cbar_kws={"orientation": "horizontal"}\
                    ,cmap = self.cmap)
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Normal_line_graph(self):#分布统计图,只能一次画一个图
        sns.set_theme(style='white')
        ax = sns.distplot(self.df.values,hist=True,kde=True,)
        ax.set_ylabel('Density')
        ax.set_xlabel('Value')
        ax.spines['right'].set_visible(False)
        ax.spines['top'].set_visible(False)
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Normal_graph(self):

        sns.displot(self.df ,x=self.x, hue=self.hue,\
                    y=self.y, kind="kde", fill=True)
        #一个参数X是 画的图是分布曲线,有两个图时,画的是分布面
        plt.ylabel('Density')
        plt.xlabel('Value')
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Box_graph(self):
        sns.catplot(kind="box", data=df)#kind 有 box 和 box 两种模式
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Reg_plot(self):
        # sns.set_style("dark")  # 背景样式
        sns.jointplot(x=self.x, y=self.y,hue=self.hue, data=self.df, kind="reg",)
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Error_graph(self):#时间序列的误差线
        ax = sns.lineplot(x=self.x, y=self.y,hue=self.hue,\
                     data=self.df,ci=95)#置信度,绘制在95%的置信区间内
        ax.spines['right'].set_visible(False)
        ax.spines['top'].set_visible(False)
        ax1 = ax.twinx()
        ax1.scatter(x=self.df[self.x], y=self.df[self.y])
        ax1.spines['right'].set_visible(False)
        ax1.spines['top'].set_visible(False)
        plt.axis('off')
        plt.savefig(self.fname, dpi=100)
        plt.show()

    def Ploe_graph(self):
        labels = self.df.index#评价指标
        features = self.df.columns#评价特征(评价对象)
        plt.style.use('bmh')
        values = self.df.values

        values = np.vstack((values,values[0]))#加入第一个values 的新的values
        angles = np.array([np.linspace(0,2*np.pi,values.shape[0]-1,endpoint=False)]).T
        angles = np.vstack((angles,angles[0]))#加入第一个angles的新的angles
        fig = plt.figure()
        ax = fig.add_subplot(111, polar=True)
        i = 0#labels索引
        for values_ in values.T:
            ax.plot(angles, values_, 'o-', linewidth=1,alpha = 0.8,label=features[i])
            ax.fill(angles,values_,alpha=0.5)
            i = i+1
        angle_ = angles * 180/np.pi
        ax.set_thetagrids(angle_.flatten()[:-1], labels)
        plt.legend(loc='best')
        plt.savefig(self.fname, dpi=100)
        plt.show()
#测试数据
data = np.random.uniform(1,10,(5,3))
# data = datasets.load_iris().data[:,:3]
df = pd.DataFrame(data,
                  columns=['sumh','nona','buy'],
                  # index=['apple','orange','bananan','juice','mike','cow']
                  )
Plot(df,'Pole',x='sumh',y='nona',cmap='nipy_spectral').Ploe_graph()


在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

总的来说画的还算一般,可能origin画的更好看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值