大家好,我是黄同学
我们之前已经讲述了matplotlib的绘图原理,本文介绍相关图形绘制。
主要是箱线图、散点图、气泡图、雷达图。
《matplotlib绘图的核心原理》
《matplotlib绘图技巧详解(一)》
《matplotlib绘图技巧详解(二)》
《matplotlib绘图技巧详解(三)》
1)作用
绘制X轴、Y轴平行线,主要用来做对比参考。
2)语法格式与相关参数说明① 语法格式
② 参数说明
3)演示说明
① 绘制X轴平行线
plt.subplot(121)
plt.axhline(0.5,0,1,c="r",lw=3)
plt.subplot(122)
plt.axhline(0.5,0.2,0.8,c="g",lw=3)
结果如下:
② 绘制Y轴平行线
plt.subplot(121)
plt.axvline(0.5,0,1,c="r",lw=3)
plt.subplot(122)
plt.axvline(0.5,0.2,0.8,c="g",lw=3)
结果如下:
1)作用
折线图用于显示随时间或有序类别而变化的趋势。折线图其实是由多个点连接在一起得到了,当点足够多的时候,折线图就变成了平滑的曲线。
2)语法格式和参数说明
① 语法格式
② 参数说明
3)演示说明
① 绘制一个点
plt.plot(50, marker="D")
结果如下:
② 绘制多个点
当只传入一组数据的时候,那么每个元素的下标相当于X轴横坐标,这一组数据中的每个值相当于Y轴的纵坐标。当传入两组数据,第一组数据相当于X轴横坐标,第二组数据相当于Y轴的纵坐标。
plt.subplot(121)
plt.plot([8,2,9,15,-3],c="g",marker="v",ls="--")
plt.subplot(122)
plt.plot([-3,-1,5,8,12], [2,-10,9,3,6],c="r",marker="*",ls="-")
结果如下:
③ 绘制对比折线图
plt.figure(dpi=100)
x = np.arange(1,13)
y1 = np.array([568,645,789,412,435,673,345,632,467,876,912,1222])
y2 = np.array([675,412,545,645,831,345,459,734,812,611,1500,900])
plt.plot(x,y1,c="r",marker="*",ls="-",label="2019年销售额")
plt.plot(x,y2,c="g",marker="v",ls="--",label="2020年销售额")
plt.legend(loc="best",ncol=2)
plt.title("2019-2020年销售额对比图")
plt.xlabel("月份")
plt.ylabel("销售额")
plt.xticks(np.arange(1,13),[str(i)+"月" for i in range(1,13)])
p1 = zip(x,y1)
p2 = zip(x,y2)
for x,y1 in p1:
plt.text(x,y1,y1,ha="center",va="bottom",fontsize=10)
for x,y2 in p2:
plt.text(x,y2,y2,ha="center",va="bottom",fontsize=10)
plt.savefig("2019-2020年销售额对比图",dpi=300)
结果如下:
1)作用
柱形图又叫条形图、柱状图,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。
2)语法格式和参数说明
① 语法格式
plt.bar(x,height,color,edgecolor,width=0.8,bottom=None,align=“center”)
② 参数说明
3)演示说明
① 绘制某超市饮料类型和顾客性别的条形图
plt.figure(dpi=100)
x1 = [1,2,3,4,5]
y1 = [6,10,11,8,15]
x2 = [1,2]
y2 = [22,28]
plt.subplot(121)
plt.bar(x1,y1,width=0.5,align="center",color="r")
plt.title("不同饮料类型的人数对比图")
plt.xlabel("饮料类型")
plt.ylabel("数量")
plt.xticks([1,2,3,4,5],["果汁","矿泉水","绿茶","其它","碳酸饮料"])
plt.yticks(np.arange(0,16,3))
for x1,y1 in zip(x1,y1):
plt.text(x1,y1,y1,ha="center",va="bottom",fontsize=10)
plt.subplot(122)
plt.bar(x2,y2,width=0.8,align="center",color="g")
plt.title("不同顾客性别的人数对比图")
plt.xlabel("顾客性别")
plt.ylabel("数量")
plt.xticks([1,2],["男","女"])
plt.yticks(np.arange(0,31,5))
for x2,y2 in zip(x2,y2):
plt.text(x2,y2,y2,ha="center",va="bottom",fontsize=10)
plt.subplots_adjust(wspace=0.5)
plt.savefig("饮料类型和顾客性别",dpi=300)
结果如下:
② 绘制某超市不同饮料类型下,男女人数的对比图
plt.figure(dpi=100)
x = np.array([1,2,3,4,5])
y1 = np.array([1,6,7,2,6])
y2 = np.array([5,4,4,6,9])
plt.bar(x,y1,width=0.5,label="男",color="g")
plt.bar(x+0.5,y2,width=0.5,label="女",color="b")
plt.title("某超市不同饮料类型下男女人数的对比图")
plt.xlabel("饮料类型")
plt.ylabel("数量")
plt.legend(loc="best",title="顾客性别")
plt.xticks(x+0.15,["果汁","矿泉水","绿茶","其它","碳酸饮料"])
plt.yticks(np.arange(0,11,2))
for x,y1 in zip(x,y1):
plt.text(x,y1,y1,ha="center",va="bottom",fontsize=10)
for x,y2 in zip(x+0.5,y2):
plt.text(x,y2,y2,ha="center",va="bottom",fontsize=10)
plt.savefig("某超市不同饮料类型下男女人数的对比图",dpi=300)
结果如下:
1)演示说明
① 绘制不同类型饮料的帕累托图
plt.figure(dpi=100)
x = np.array([1,2,3,4,5])
y1 = np.array([6,10,11,8,15])
# 先将y1中的元素,进行降序排序
y1 = np.sort(y1)[::-1]
y2 = y1.cumsum()/np.sum(y1)
plt.bar(x,y1,width=0.3,color="g")
plt.xlabel("饮料类型")
plt.ylabel("数量")
plt.xticks(x,["碳酸饮料","绿茶","矿泉水","其它","果汁"])
for xy1 in zip(x,y1):
plt.annotate("{}".format(xy1[1]),xy=xy1,ha="center",va="bottom")
plt.twinx()
plt.plot(x,y2,color="r",lw=3)
plt.ylabel("百分比")
plt.yticks(np.arange(0,1.1,0.2))
plt.title("不同类型饮料的帕累托图")
plt.savefig("不同类型饮料的帕累托图",dpi=300)
结果如下:
1)作用
饼图用圆形及圆内扇形的角度来表示数值大小的图形,它主要用于表示一个样本(或总体)中各组成部分的数据占全部数据的比例。对于研究一个总体的结构性组成很有作用。
2)语法格式和参数说明
① 语法格式
plt.pie(x,y,height,color,edgecolor,width=0.8,bottom=None,align=“center”)
② 参数说明
一些重要参数的图示说明:
3)演示说明
① 绘制不同饮料类型构成的饼图
plt.figure(dpi=100)
x1 = np.array([6,10,11,8,15])
x = x1/np.sum(x1)
labels = ["果汁","矿泉水","绿茶","其它","碳酸饮料"]
colors=["r", "g", "b", "y", "m"]
explode = [0.05,0,0,0,0]
plt.pie(x,labels=labels,colors=colors,autopct="%.0f%%",
explode=explode,startangle=90,counterclock=False)
plt.axis("equal")
plt.savefig("不同饮料类型构成的饼图",dpi=300)
结果如下:
② 绘制环形图:以绘制三环形为例
操作如下:
plt.figure(figsize=(8,5),dpi=100)
x1 = [3496.57,1161.55,1251.09,1961.07]
x2 = [1383.36,775.09,595.09,1605.61]
x3 = [3756.56,1623.36,1730.51,3255.94]
labels = ["劳动者报酬","生产税金额","固定资产折旧","营业盈余"]
colors=['pink','greenyellow','lightcoral','cyan']
plt.pie(x1,colors=colors,autopct="%.0f%%",radius=1.3,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.9)
plt.pie(x2,colors=colors,autopct="%.0f%%",radius=1,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.85)
plt.pie(x3,colors=colors,autopct="%.0f%%",radius=0.7,
wedgeprops=dict(width=0.3,edgecolor="w"),
startangle=90,counterclock=False,pctdistance = 0.75)
plt.legend(labels=labels,loc="best",title="生产总值构成")
plt.title("生产总值构成的环形图")
plt.axis("equal")
plt.savefig("生产总值构成的环形图",dpi=300)
结果如下:
① 语法格式
plt.pie(x,y,height,color,edgecolor,width=0.8,bottom=None,align=“center”)
② 参数说明
③ 演示说明
df = pd.read_excel(r"C:\Users\黄伟\Desktop\matplotlib.xlsx",sheet_name="直方图")
def func(x):
if x>=140 and x<150:
return "(140,150]"
elif x>=150 and x<160:
return "(150,160]"
elif x>=160 and x<170:
return "(160,170]"
elif x>=170 and x<180:
return "(170,180]"
elif x>=180 and x<190:
return "(180,190]"
elif x>=190 and x<200:
return "(190,200]"
elif x>=200 and x<210:
return "(200,210]"
elif x>=210 and x<220:
return "(210,220]"
elif x>=220 and x<230:
return "(220,230]"
elif x>=230 and x<240:
return "(230,240]"
df["分组"] = df["销售量"].apply(func)
df1 = df.groupby("分组")["销售量"].count()
df1 = pd.DataFrame(df1)
df1 = df1.reset_index()
df1["频率"] = df1["销售量"].apply(lambda x:x/np.sum(df1["销售量"]))
df1["频率"] = df1["频率"].apply(lambda x:"{:.2%}".format(x))
plt.figure(figsize=(6,5),dpi=100)
plt.hist(df["销售量"],bins=[140,150,160,170,180,190,200,210,220,230,240],edgecolor='white',color="pink")
x = np.array([140,150,160,170,180,190,200,210,220,230,240])
plt.xticks(x+5,["{}-{}".format(x,x+10) for x in range(140,231,10)],rotation=90)
plt.yticks(np.arange(0,31,5))
for z in zip(x+2.5,df1["销售量"]):
plt.annotate("{}".format(z[1]),xy=z,color="black")
plt.tight_layout()
plt.savefig("某电脑公司销售量分布的直方图",dpi=300)
结果如下:
未完待续,本系列还有最后一篇相关图形绘制(二)。
如果大家觉得文章对你有帮助,欢迎扫描下方二维码关注黄同学的CSDN博客