为了方便调用, 把每一种绘制的方法用函数封装起来
"""
plt.figure(num=1,figsize=(12,8),alpha=0~1) # num是第几张图, figsize定义尺寸,alpha透明度
plt.add_subplot(1,1,1) # add_subplot(行,列,第几个)
plt.plot(x,y,color='red',linestyle='',linewidth='',marker='',label='')
plt.xlabel()
plt.ylabel("",labelpad=10) # 设置坐标轴的标题; labelpad设置具体的距离/不常用
# 设置坐标的刻度(标签)
plt.xticks() # xticks(ticks, labels,rotation=45/90) ticks表示刻度值,labels表示该刻度值对应的标签;标签旋转角度
plt.yticks()
# 设置坐标轴范围; 不常用,系统默认设置了合理的范围
plt.xlim(0,100)
plt.ylim(0,1000)
plt.grid(b=True,axis='x/y') # 打开x/y轴的网格, 不设置则默认x,y都打开
plt.legend() # 打开plot()中设置的label(图例), 默认最佳位置
plt.title() # 设置标题
# 设置数据标签 text(x,y,str,fontsize) ; x,y是位置, str是显示内容, fontsize是字体大小
plt.text()
"""
# 1.绘制折线图
def plot_fig():
"""绘制折线图: 适用于 两变量都是连续变量 ; 需要解决的问题就是排序问题"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_csv('creditcard_exp.csv', skipinitialspace=True) # skipinitialspace=True 用于方差分析
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
# 取出两列连续变量画图avg_exp ~ Income
data_two = data[['Income','avg_exp']].copy()
# 其中Income作为自变量, 所以将data_two按Income这一列从小到大排序
new_data_two = data_two.sort_values(by=['Income'],ascending=True)
# 设置x,y轴
x = new_data_two['Income']
y = new_data_two['avg_exp']
# 绘折线图
plt.plot(x,y,color='red',linestyle='solid')
plt.xlabel("年收入/万元")
plt.ylabel("年信用卡消费/元")
plt.show()
# 绘制柱状图
def bar_fig():
""" 柱状图常用于单分类变量,比较其数量"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_excel('data.xlsx')
# 取出一分类变量; 是否续保 这一列
data1 = data['是否续保'].copy()
# 设置x,y轴
x = tuple(data1.unique()) # ['是','否']
y = tuple(data1.value_counts())
# 画图bar(x, height/就是y, width=0.8/柱子宽度, bottom=None, *, align='center',color, **kwargs):
plt.bar(x,y,width=0.2,label= '是否续保人数',color='green')
plt.legend()
plt.ylabel('人数')
# 在每根柱子上方添加标签
for a,b in zip(x,y): # 给柱子加上标签
plt.text(a,b,b)
plt.show()
# bar_fig()
# 簇状柱形图: 常用来表示不同类别随着同一变量的变化情况
def cluster_bar():
"""两个分类变量"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_excel('data.xlsx')
# 取出两分类变量: 险种(x)~是否续保(y)
# 画出险种是: 交强险 ~是否续保 情况; 商业险 ~是否续保 情况
data1 = data[['险种','是否续保']].copy()
data2 = data1[data1['险种']=='交强险'][data1['是否续保']=='是']
data3 = data1[data1['险种']=='交强险'][data1['是否续保']=='否']
data4 = data1[data1['险种']=='商业险'][data1['是否续保']=='是']
data5 = data1[data1['险种']=='商业险'][data1['是否续保']=='否']
x = np.array([1,2])
y1 =[data2.shape[0],data4.shape[0]]
y2 = [data3.shape[0],data5.shape[0]]
plt.bar(x,y1,width=0.3,color='red',label='是')
for a,b in zip(x,y1): # 给柱子加上标签
plt.text(a,b,b)
# 画簇状柱形图核心是将x轴平移; 分类非常麻烦, 尽量将分类好的结果构成list,series形式;
# x轴变量必须是series形式(因为只有series允许运算)
plt.bar(x+0.3,y2,width=0.3,color ='blue',label='否')
for a,b in zip(x+0.3,y2): # 给柱子加上标签
plt.text(a,b,b)
plt.xticks(x,['交强险','商业险'])
plt.ylabel('是否续保人数')
plt.title('不同险种的续保情况')
plt.legend()
plt.show()
# cluster_bar()
# 绘制条形图
def barh_fig():
""" 条形图就是柱状图横着放 同样用于分类变量之间"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_excel('data.xlsx')
# 取出一分类变量; 是否续保 这一列
data1 = data['是否续保'].copy()
# 设置x,y轴
x = tuple(data1.unique()) # ['是','否']
y = tuple(data1.value_counts())
# 画图barh(y/柱子的位置, width/柱子的长度,横坐标,height/柱子的宽度,, left=None, *, align='center', color, **kwargs):
plt.barh(x,y, height=0.2, label='是否续保人数', color='green')
plt.legend()
plt.xlabel('人数')
plt.grid(b=True,axis='x',alpha=0.8)
# 在每根柱子上方添加标签
for a, b in zip(y, x): # 给柱子加上标签
plt.text(a, b, a)
plt.show()
# barh_fig()
# 绘制饼状图
def pie_fig():
""" 饼状图通常用来表示同一等级中不同类别的变量占比情况 """
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_excel('data.xlsx')
# 取出某一列分类变量: 是否续保 这一列
data1 = data['是否续保'].copy()
# 建立绘图数据(也可以是百分比的数据); 饼状图不存在x,y轴
data2 = dict(data1.value_counts(normalize = False)) # normalize = True 计算百分比,然后转化为字典
# 将字典data_x 分别取出 键key 和 值value 并转化为元组/列表分别作为标签和绘图数据
data_x = list(data2.values())
data_label =list(data2.keys())
# print(data_x)
# print(data_label)
# pie(x/数据,labels/标签,atuopct/百分比格式)
plt.pie(x=data_x,labels=data_label,autopct='%.0f%%') # autopct='%.0f%%' 数值的百分比格式
plt.show()
# pie_fig()
# 绘制树状图
def squarify_fig():
""" 树状图通常用于表示: 同一等级中不同类别的占比关系 ~~~~~ 用法与饼状相似"""
# squarify.plot(sizes,label,value,)
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import squarify # 没有该模块, 需要安装
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_excel('data.xlsx')
# 取出多分类变量/渠道
data1 = data['渠道']
# 将data1转化为字典
dict_data1 = dict(data1.value_counts())
# 将字典中的键和值分别转化为元组或列表
tuple_key = tuple(dict_data1.keys())
tuple_value = tuple(dict_data1.values())
# 设置绘图数据和标签
size = tuple_value
label = tuple_key
#
squarify.plot(size,label=label)
plt.show()
# squarify_fig()
# 绘制盒须图/箱形图
def boxplot_fig():
"""盒须图通常用来反映一组数据离散程度,所有用于一组连续变量, 也可以用于比较多组变量; 1.5 IQR 外离群值
plt.boxplot(x/数据,vert/图方向,=默认True纵向/Fasle横向,widths/图形宽度,labels/标签)
"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_csv('creditcard_exp.csv')
# 比较男,女的收入水平; 取出这两列
data1 = data[['Income','gender']].copy()
# 分类,然后转化为列表
man_income = list(data1[data1['gender']==1]['Income'])
woman_income = list(data1[data1['gender'] == 0]['Income'])
# 绘制盒须图
x =[man_income,woman_income] # 社设置数据
label = ['男','女'] # 设立标签
plt.boxplot(x,labels=label,widths=0.5)
plt.ylabel('年收入/万元')
plt.show()
# boxplot_fig()
# 作直方图; 查看单样本数据分布情况, 是否分布正太分布
def hist_fig():
""" 一般用于连续变量, 查看数据分布情况, 可以同时绘制核密度图, 并用正态分布拟合曲线"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_csv("house_price_gr.csv", encoding='gbk') # 文件有中文,encoding= 'gbk'
# 取出Income
data1 = data['rate']
# 绘制直方图
plt.figure(figsize=(20,12))
plt.subplot(2,2,1)
plt.hist(data1,bins=20)
# data1.hist(bins=40)
# 在直方图的基础上, 同时绘制核密度图, 并用正态分布拟合曲线
# kde = True核密度图, fit = stats.norm用正态分布拟合
import seaborn as sns
plt.subplot(2,2,4)
plt.title('核密度图')
sns.distplot(data1,bins=20, kde=True)
plt.subplot(2, 2, 3)
sns.distplot(data1,bins=20, fit=stats.norm)
plt.subplot(2, 2, 2)
sns.distplot(data1,bins=20,kde=True,fit=stats.norm)
plt.show()
# hist_fig()
# QQ图
def qqplot_fig():
"""
QQPlot图是用于直观验证一组数据是否来自某个分布,或者验证某两组数据是否来自同一(族)分布。
常用的是检验数据是否来自于正态分布。服从正态分布时是一条直线
qplot(self, xlabel=None, ylabel=None, line=None, other=None,
ax=None, **plotkwargs):
xlabel, ylabel : str or None, optional
line : str {'45', 's', 'r', q'} or None
"""
import os
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
from scipy import stats
import numpy as np
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
data = pd.read_csv("creditcard_exp.csv", encoding='gbk') # 文件有中文,encoding= 'gbk'
# 取出Income
data1 = data['Income']
data2 = data['Age']
data3 = data['edu_class']
import statsmodels.api as sm
# 绘制qq图,查看点分布,并拟合直线, 点在直线上则符合正太分布
plt.figure(1)
plt.subplot(2,2,1)
sm.qqplot(data1, fit=True, line='45')
plt.title('年收入的分布规律')
plt.subplot(2,2,2)
sm.qqplot(data2,fit=True,line='45')
# qqplot_fig()
# 绘制热力图
def imshow_fog():
""" 热力图的绘图数据必须要是矩阵的形式; 热力图通常用于画系数相关矩阵"""
import os
import matplotlib.pyplot as plt
import matplotlib
import pandas as pd
import seaborn as sns
matplotlib.rcParams['axes.unicode_minus'] = False # 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定默认字体
os.chdir(r'D:\pycharm程序文件\练习1')
df = pd.read_csv("creditcard_exp.csv", encoding='gbk') # 文件有中文,encoding= 'gbk'
data = df.corr()
fig, ax = plt.subplots(figsize=(20, 20))
sns.heatmap(data, annot=True, vmax=1, vmin=0, xticklabels=True,
yticklabels = True, square = True, cmap = "YlGnBu")
ax.set_title('feature heatmap', fontsize=20)
plt.xticks(rotation=45)
plt.show()
imshow_fog()
python中Pearson 相关矩阵热力图 python用excel数据做热力图
转载本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
python导入数据热力图 python热力图参数
前面文章介绍了3种很很常见常用的数据可视化技术在Python必会的9种数据可视化技术--第一弹,今天要介绍的不是那么常见但是你也得会哈,不多说,直接往下看箱型图箱线图展示中位数,最小值,最大值以及第一和第四四分位数。还有箱型图可以将潜在的异常值显示出来。看例子import pandas as pdimport seaborn as snsdf = pd.read_csv('mtcars.csv',
python导入数据热力图 python 热力图 python提出csv中数据 python热力图 python特征相关性热力图怎么画 -
python热力图绘制 python画热力图
利用python pyheatmap包绘制热力图,供大家参考,具体内容如下
python热力图绘制 python生成热度图 python 背景图片