【数据分析3plt绘图】


导入相关库:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.figure(figsize=(16,12))
fig,axes=plt.subplots(ncols=2)
plt.tight_layout()
%matplotlib inline
plt.rcParams['font.sans-serif']=['Songti SC']#中文显示
plt.rcParams['axes.unicode_minus']=False
import matplotlib as mpl
mpl.rcParams['axes.titlesize']='10'
# 忽略告警信息
import warnings
warnings.filterwarnings("ignore")

plt.plot折线图

plt.xticks(rotation=45)旋转x坐标名称

plt.plot(x,y,ls=,lw=,c=,marker=,markersize=,markeredgecolor=,markerfacecolor, label=)

ls: 折线的风格(‘-‘, ’--‘, ’-.‘':‘)
lw: 线条宽度
c: 颜色
marker: 线条上点的形状
markersize: 线条上点的形状大小
markeredgecolor: 点的边框色
markerfacecolor: 点的填充色
label: 图例

Marker说明
‘.’point marker
‘,’pixel marker
‘o’circle marker
‘v’triangle_down marker
‘^’triangle_up marker
‘<’triangle_left marker
‘>’triangle_right marker
‘1’tri_down marker
‘2’tri_up marker
‘3’tri_left marker
‘4’tri_right marker
‘s’square marker
‘p’pentagon marker
‘*’star marker
‘h’hexagon1 marker
‘H’hexagon2 marker
‘+’plus marker
‘x’x marker
‘D’diamond marker
‘d’thin_diamond marker
‘|’vline marker
‘_’hline marker

RGB颜色对照表

plt.plot(x,y,c='red',lw=2,ls='-.')
plt.title('图标题')

x = np.linspace(0,10,100)
y = np.sin(x)
plt.plot(x,y,ls='-',lw=2,marker='o',markersize=5,c= 'red',markeredgecolor ='blue',
         markerfacecolor='black')
plt.show()

WORK_PROVINCE = air_data['WORK_PROVINCE'].value_counts()[:10]# 统计前10的注册省份地区
fig = plt.figure(figsize=(8,6)) # 创建画布
ax =fig.add_axes([0.2,0.4,0.8,0.7])# 画布大小
plt.plot(WORK_PROVINCE.index,WORK_PROVINCE.values,color ='g',marker='H', ls ='--',label='注册用户数')## 绘制折线图
plt.xlabel('地区',labelpad=15,fontsize=20)## 添加横轴标签
plt.ylabel('注册用户数',labelpad=15,fontsize=20) ## 添加y轴名称
plt.xticks(WORK_PROVINCE.index,rotation=45,fontsize=10)#给X 轴刻度打标签
plt.title('航空公司注册用户数折线图',fontsize=20)## 添加图表标题
plt.legend(bbox_to_anchor=(1.2,0.95),ncol=1, frameon=True, #是否要边框
           title ='航空公司情况',shadow=False, fancybox=False)
plt.show()

在这里插入图片描述

# 统计不同年份计算注册会员数
group_data = df.groupby(df['FFP_DATE']).size()
import matplotlib as mpl
# 获取图的坐标信息
ax = plt.gca()
fig = plt.gcf() #返回当前图像并设置为该图像对象名称为fig
fig.set_size_inches(8,6) 
# 设置日期的显示格式
date_format = mpl.dates.DateFormatter("%Y-%m-%d")
ax.xaxis.set_major_formatter(date_format)
# 设置x轴显示多少个日期刻度
xlocator = mpl.ticker.LinearLocator(20)
# 设置x轴每个刻度的间隔天数
#xlocator = mpl.ticker.MultipleLocator(100)
ax.xaxis.set_major_locator(xlocator)
# 为了避免x轴刻度标签的紧凑,将刻度标签旋转45度
plt.plot(group_data.index, # x轴数据
         group_data.values, # y轴数据
         linestyle = '-', # 折线类型
         linewidth = 2, # 折线宽度
         color = 'steelblue') # 折线颜色
plt.xticks(rotation=45)
# 添加y轴标签
plt.ylabel('会员数量')
# 添加图形标题
plt.title('不同年份会员数量变化趋势')

在这里插入图片描述

plt.text在相应位置添加文字

plt.text(x,y,text,weight,color,fontsize)

分别代表文本的起始x坐标和y坐标,文本内容,字体,颜色和字体大小

x=np.linspace(0,10,100)
y=np.sin(x)
plt.plot(x,y,lw=2,ls='-.')
plt.text(3.1,0.2,'This is a function',weight='bold',color='red',fontsize=12)#(3.1,0.2)坐标位置
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.grid(ls='--',c='darkblue')#加网格线

plt.legend添加图例

loc参数:

best
upper right
upper left
lower left
lower right
right
center left
center right
lower center
upper center
center

plt.plot(x,y,c='red',lw=2,ls='-',marker='o',markersize=4,markeredgecolor='green',markerfacecolor='black',label='The relation of x and y')#label图例
plt.legend(loc='best')
plt.legend(bbox_to_anchor=(1.45,0.95),ncol=1,frameon=True,title='airline company',shadow=True,fancybox=False)#ncol=1排成1列,fancybox=False边框无圆角
x=np.arange(10)
for i in range(1,4):
    plt.plot(x,i*x**2,label="Group %d'%i")
plt.legend(loc='best')
plt.legend(loc='upper center',bbox_to_anchor=(0.5,1.15),ncol=3)#3列ncol=3
plt.legend(loc='upper center',bbox_to_anchor=(1.15,1),ncol=1,framealpha=0.1)#framealpha=0.1图例边框透明度

plt.axvline绘制参考线

添加plt.axhline水平线和plt.axvline垂直线

df=pd.read_csv(r'./data/air.csv')
df['FFP_DATE']=pd.to_datetime(df['FFP_DATE'],format='%Y/%m/%d',errors='coerce')
group_data=df.groupby(df['FFP_DATE'].dt.year).size()
plt.plot(group_data.index,group_data.values,label='Number of registered members in different years')
plt.legend(loc='best')
plt.axhline(y=group_data.values.mean(),c='red',ls='--',lw=2)#水平线
plt.axvline(x=2012,c='red',ls='--',lw=2)#垂线

plt.axvspan绘制参考区域

添加plt.axhspan水平区域和plt.axvspan垂直区域

plt.plot(group_data.index,group_data.values,label='Number of registered members in different years')
plt.legend(loc='best')
plt.axvspan(xmin=2006,xmax=2008,facecolor='red',alpha=0.4)#垂直区域,alpha=0.4透明度
plt.axhspan(ymin=np.quantitle(group_data.values,0.25),ymax=np.quantitle(group_data.values,0.75),facecolor='yellow',alpha=0.3)

plt.annotate箭头标注

plt.annotate('Identity with the most number of registered users',xy=(0,17500),xytext=(0.5,15000),weight='bold',color='red',
             arrowprops={'arrowstyle':'->','connectionstyle':'arc3','color':'black'})

fig = plt.figure(figsize=(6,4)) # 创建画布
plt.plot(WORK_PROVINCE.index,WORK_PROVINCE.values,color ='g',marker='H', ls ='--',label='注册用户数')## 绘制折线图
plt.xlabel('地区',labelpad=15,fontsize=12)## 添加横轴标签
plt.ylabel('注册用户数',labelpad=15,fontsize=12) ## 添加y轴名称
plt.xticks(WORK_PROVINCE.index,rotation=45,fontsize=10)#给X 轴刻度打标签
plt.title('航空公司注册用户数折线图',fontsize=12)## 添加图表标题
plt.legend(bbox_to_anchor=(1.3,0.95),ncol=1, frameon=True, #是否要边框
           title ='航空公司情况',shadow=False, fancybox=False)
plt.annotate('注册用户最多省份',xy=(0,17500), xytext=(2,15000),weight='bold',color='black',
             arrowprops =dict(arrowstyle='->',connectionstyle = 'arc3',color='red')) 
# xy=(0,17500) 也可以理解为箭头的位置

在这里插入图片描述

绘制双坐标轴

# 统计不同年份的飞行次数总数和飞行公里数总和
air_data['FFP_DATE'] = pd.to_datetime(air_data['FFP_DATE'],format ='%Y/%m/%d',errors = 'coerce')
group_data = df.groupby(air_data['FFP_DATE'].dt.year).sum()[['FLIGHT_COUNT','SEG_KM_SUM']]
# # # # # # 绘制双坐标(双Y轴)
fig = plt.figure() # 创建作图对象
ax1 = fig.add_subplot(111)
ax1.plot(group_data.index, group_data['FLIGHT_COUNT'],label='飞行次数')
ax1.set_ylabel('飞行次数')
ax1.set_title("飞行次数,飞行里程数与年份关系")
plt.legend(loc ='upper left')
ax2 = ax1.twinx()  # this is the important function #添加次坐标轴
ax2.plot(group_data.index, group_data['SEG_KM_SUM'], ls='-.',c='r',label='飞行里程数')
ax2.set_ylabel('飞行里程数')
plt.legend(loc ='upper center')

在这里插入图片描述

保存图形plt.savefig()

x = np.arange(0,1.1,0.01)
y = x**2
plt.figure(figsize=(9,9),dpi=160,facecolor='grey') # figsize: 画图大小,dpi:图形分辨率, facecolo:背景色
plt.title('lines') #添加标题
plt.xlabel('x')
plt.ylabel('y')
plt.xlim((0,1)) # 确定x轴的范围
plt.ylim((0,1)) # 确定y轴的范围
plt.xticks([0,0.2,0.4,0.6,0.8,1]) # 确定x轴的刻度标签
plt.yticks([0,0.2,0.4,0.6,0.8,1]) # 确定y轴的刻度标签
plt.plot(x,y,label='y =x^2')
plt.legend(loc='best')
plt.savefig('可视化.pdf')
plt.show()

plt.pie饼图

data['创建日期']=pd.to_datetime(data['创建日期'],format='%Y.%m.%d',errors='coerce')
data_1=data.groupby(data['创建日期'].dt.year).size()
colors=['hotpink','steelblue','coral','skyblue'] 
explode=[0.1,0,0.15,0]#可用于突出显示最多、最少的部分
# 中文乱码和坐标轴负号的处理
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.axes(aspect='equal')#饼图是正圆
plt.pie(x=data_1.values,explode=explode,labels=data_1.index,colors=colors,autopct='%.1f%%',pctdistance=0.5,labeldistance=1.2,startangle = 120,radius = 1.2,counterclock=False,wedgeprops={'linewidth':1.5,'edgecolor':'green'},textprops={'fontsize':10,'color':'black'})#pctdistance= 0.5设置百分比标签与圆心的距离,labeldistance = 1.2设置标签与圆心的距离,startangle = 120设置饼图的初始角度,radius = 1.2设置饼图的半径,counterclock=False是否逆时针,这里设置为顺时针方向,wedgeprops设置饼图内外边界的属性值,textprops设置文本标签的属性值
plt.title('订单数量分布',pad =30)

plt.pie(x = x_data, # 绘图数据
        labels=y_labels, # 添加标签
        colors=colors, # 设置饼图的自定义填充色
        autopct='%.1f%%', # 设置百分比的格式,这里保留一位小数
        )
# 添加图标题
plt.title('订单数量分布',pad=5)
# 显示图形
plt.show()

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

plt.bar柱状图

data_1=data.group(data['创建日期'].dt.year).sum()#汇总数值型变量
plt.bar(x=range(0,len(data_1['销售订单数量'].values)),height=data_1['销售订单数量'].values,align='center',color='y',tick_label=data_1.index)#x轴标签tick_label=data_1.index
plt.xlabel('year',labelpad=19)
plt.ylabel('The quantity of total order',labelpad=10)#labelpad=10标签距y轴的距离
plt.title('Total number of orders in different years',pad=15)

plt.hist直方图

频数直方图

plt.hist(air_data['AGE'],bins=30,color='red',edgecolor='black')
plt.xlabel('The age of customers',labelpad=20,fontsize=18)
plt.ylabel('frequency',fontsize=18)
plt.title('年龄分布图',fontsize =15,pad =20)

频率直方图

plt.hist(air_data['AGE'],bins=30,color='red',edgecolor='black',density=True)
plt.ylabel('frequency rate',fontsize=18)

plt.scatter散点图

# 绘制年龄和飞行次数的的关系
plt.scatter(air_data['FLIGHT_COUNT'],air_data['SEG_KM_SUM'],color='steelblue',marker='*',s=50)
plt.xlabel('flight number')
plt.ylabel('Total flight mileage')

plt.boxplot箱线图

注意绘图时,不能有缺失值

plt.boxplot(x,notch,sym,vert,whis,positions,widths,patch_artist,meanline,showmeans, boxprops,labels,flierprops)

patch_artist——是否填充箱体颜色
meanline——是否显示均值
showmeans——是否显示均值
meanprops——设置均值属性,如点的大小,颜色等
medianprops——设置中位数的属性,如线的类型,大小等
showfliers——是否表示有异常值
boxprops——设置箱体的属性,边框色和填充色
cappops——设置箱线顶端和末端线条的属性,如颜色,粗细等

age=air_data[air_data['AGE'].notnull()]['AGE']
plt.boxplot(x=age,patch_artist=True,showmeans=True,
            boxprops={'color':'red','facecolor':'grey'},showfliers=True,
            filerprops={'marker':'o','markerfacecolor':'red','markersize':5},
            meanprops={'marker':'D','markerfacecolor':'darkred','markersize':4},
            medianprops={'linestyle':'--','color':'blue'})
plt.title('Age distribution of airlines')

有缺块箱线图

zhu_data=[np.random.normal(0,std,100) for std in range(1,4)]
fig=plt.figure(figsize=(8,6))
bplot=plt.boxplot(zhu_data,ntoch=True,sym='s',vert=False)#vert=False水平状
plt.xticks([y+1 for y in range(len(zhu_data))],['x1','x2','x3'])
plt.xlabel('x')
plt.title('box plot')
colors=['pink','lightblue','lightgreen']
for patch,color in zip(bplot['boxes'],colors):
    patch.set_facecolor(color)

plt.violinplot小提琴图

plt.violinplot(zhu_data,showmeans=False,showmedians=True)
plt.title('violin plot')
plt.xlim([min(data)-5,max(data)+5])
for x,y in zip(x_data,y_data):
    plt.annotate('(%s,%s)'%(x,y),xy=(x,y),xytext=(0,-15),textcoords='offset points',ha='center')

绘制子图

fig,axes=plt.subplots(ncols=2)2列子图

fig,axes=plt.subplots(ncols=2)
v_bars=axes[0].bar(x,y,color='red')
h_bars=axes[1].barh(x,y,color='green')
axes[0].axhline(0,color='grey',lw=2)
axes[0].axvline(0,color='grey',lw=2)

标注y<0的柱状图

fig,ax=plt.subplots()
v_bars=ax.bar(x,y,color='lightblue')
for bar,height in zip(v_bars,y):
    if height<0:
       bar.set(edgecolor='darkred',color='green',lw=3)

plt.subplot(121)1行2列

data['创建日期']=pd.to_datetime(data['创建日期'],format='%Y.%m.%d',errors='coerce')
data_1=data.groupby(data['创建日期'].dt.year).size()
plt.figure(figsize=(16,12))
plt.subplot(121)#1行2列
plt.bar(x=range(0,len(data_1.index)),height=data_1.values,align='center',color='steelblue',tick_label=data_1.index)
plt.xlabel('year')
plt.ylabel('The total order number')
plt.subplot(122)
plt.hist(x=air_data['AGE'],bins=30,color='red',density=True,edgecolor='black')

# 设置绘图区域
plt.figure(figsize=(8,5))
plt.subplot(121) # 位置
plt.bar(x = range(0,len(x_data)),height = x_data,align='center',color='y',tick_label= y_labels)
plt.xlabel('年份',labelpad = 19)  # 控制标签和坐标轴的距离
plt.ylabel('订单数量总和',labelpad =10)
plt.title('不同年份的订单数量总和',pad=15)
plt.subplot(122)
#绘制直方图
plt.hist(x =air_data['AGE'],bins=30,color='skyblue',edgecolor='black',density=True)# density=True代表是否绘制概率密度形式
plt.xlabel('客户年龄',labelpad =20)
plt.ylabel('频数')
plt.title('年龄分布图',pad =15)

在这里插入图片描述

plt.subplot(321)
plt.plot(x,y,color='red')
plt.subplot(324)
plt.plot(x,y,color='blue')

plt.subplot2grid((2,3))跨越行列的图

subplot2grid函数可以让子区跨越固定的网格布局的多个行和列,实现不同的子区布局

plt.subplot2grid(shape,loc,colspan,rowspan)

参数
shape——网格布局
loc——表示图形的位置起点
colspan——跨越的列数
rowspan——跨越的行数

#  设置绘图区域
plt.figure(figsize=(16,9))
plt.subplot2grid((2,3),(0,0),colspan = 1,rowspan=2) #设置绘图区域
plt.bar(x = range(0,len(x_data)),height = x_data,align='center',color='y',tick_label= y_labels)
plt.xlabel('年份',fontsize=12,labelpad = 10)  # 控制标签和坐标轴的距离
plt.ylabel('订单数量总和',fontsize=12,labelpad =10)
plt.title('不同年份的订单数量总和',fontsize=15,pad =10)

plt.subplot2grid((2,3),(0,1),colspan =2,rowspan=1 ) #设置绘图区域
plt.hist(x =air_data['AGE'],bins=30,color='r',edgecolor='black',density=True)# density=True代表是否绘制概率密度形式
plt.xlabel('客户年龄',fontsize =12,labelpad =10)
plt.ylabel('频数',fontsize =12,labelpad =10)
plt.title('年龄分布图',fontsize =15,pad =10)

plt.subplot2grid((2,3),(1,1),colspan=2,rowspan=1) #设置绘图区域
plt.scatter(x = air_data['FLIGHT_COUNT'],y=air_data['SEG_KM_SUM'],color= 'steelblue',marker='*', s=80)
plt.xlabel('飞行次数',fontsize=12,labelpad =10) # 坐标轴标签大小
plt.ylabel('飞行总公里数',fontsize=12,labelpad =10)
plt.title('飞行次数与总飞行公里数的关系',fontsize=15,pad =10)
# 显示
plt.tight_layout()# 调整每个子图之间的距离

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值