人工智能学习(21 数据分析:02-matplotlib:02-绘制散点图,条形图)

散点图

假设通过爬虫你获取到了北京2016年3,10月份每天白天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
a =[11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
b = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

最终我们绘画出来的效果如下:
在这里插入图片描述
可以看到该散点图分成了两个部分。我们之前绘制泽折线图使用的方法是plt.plot,绘制散点图使用的方法为plt.scatter(x,y)。

编写代码如下:

from matplotlib import pylab as  plt
from matplotlib import font_manager
import matplotlib

# 中文设置
font = {'family' : 'MicroSoft YaHei',
        'weight': 'bold'}
matplotlib.rc("font",**font)

march_yt = [11,17,16,11,12,11,12,6,6,7,8,9,12,15,14,17,18,21,16,17,20,14,15,15,15,19,21,22,22,22,23]
october_yt = [26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,15,5,13,17,10,11,13,12,13,6]

plt.figure(figsize=(20,10), dpi=80)

march_xday = range(1,len(march_yt)+1)
mach_xday_tick = ["3月{}日".format(i) for i in march_xday]

october_xday = range(51,51 + len(october_yt))
october_xday_tick = ["10月{}日".format(i-50) for i in october_xday]



plt.scatter(march_xday , march_yt, label="3月")
plt.scatter(october_xday , october_yt, label="10月")

xday = list(march_xday) + list(october_xday)
xday_tick = mach_xday_tick + october_xday_tick
plt.xticks(xday[::3], xday_tick[::3], rotation=45 )

#显示图例
plt.legend(loc="upper right")

plt.xlabel("日期")
plt.xlabel("温度")
plt.title("3月,10月的温度关系")



plt.grid(0.4)

plt.show()


运行代码之后显示如下:
在这里插入图片描述
这样我们根据分布的情况,能勉强看出他的规律。

条形图

下面我们绘制条形图:
假设你获取到了2017年内地电影票房前20的电影(列表a)和电影票房数据(列表b),那么如何更加直观的展示该数据?

a = [“战狼2”,“速度与激情8”,“功夫瑜伽”,“西游伏妖篇”,“变形金刚5:最后的骑士”,“摔跤吧!爸爸”,“加勒比海盗5:死无对证”,“金刚:骷髅岛”,“极限特工:终极回归”,“生化危机6:终章”,“乘风破浪”,“神偷奶爸3”,“智取威虎山”,“大闹天竺”,“金刚狼3:殊死一战”,“蜘蛛侠:英雄归来”,“悟空传”,“银河护卫队2”,“情圣”,“新木乃伊”,]

b=[56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23] 单位:亿

上面的数据为离散型数据。绘制条形图使用的api为plt.bar,编写简单代码如下:

from matplotlib import pylab as  plt
from matplotlib import font_manager
import matplotlib

# 中文设置
font = {'family' : 'MicroSoft YaHei',
        'weight': 'bold'}
matplotlib.rc("font",**font)

film_name =  ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
film_ticket = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12,10.49,10.3,8.75,7.55,7.32,6.99,6.88,6.86,6.58,6.23]

plt.figure(figsize=(20,15), dpi=80)


# width为条形的宽度
plt.bar(range(len(film_name)), film_ticket, width=0.3)

# 设置x轴的显示信息
plt.xticks(range(len(film_name)), film_name, rotation=90)



plt.xlabel("票房:单位亿")
plt.xlabel("电影名称")
plt.title("票房统计")

plt.grid(0.4)

plt.show()


运行之后显示图像如下:

在这里插入图片描述
我们可以看到,x轴的信息显示很不均衡,比较难看,那我们怎么办呢?
我们可以把

-	film_name =  ["战狼2","速度与激情8","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","摔跤吧!爸爸","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护卫队2","情圣","新木乃伊",]
+	film_name =  ["战狼2","速度与\n激情8","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","摔跤吧!爸爸","加勒比\n海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","大闹天竺","金刚狼3:殊死一战","蜘蛛侠:英雄归来","悟空传","银河护\n卫队2","情圣","新木乃伊",]

这样,把比较长的电影名加上“\n”作换行处理即可。但是这种方法不是很好,我们还可以换一种方法(横着的条形图),替换代码如下:

# width为条形的宽度
#plt.bar(range(len(film_name)), film_ticket, width=0.3)

# 绘制横着的条形图
plt.barh(range(len(film_name)), film_ticket, height=0.3, color = "orange")

运行效果:
在这里插入图片描述
下面我们做一个练习:
假设你知道了列表a中电影分别在2017-09-14(b_14), 2017-09-15(b_15), 2017-09-16(b_16)三天的票房,为了展示列表中电影本身的票房以及同其他电影的数据对比情况,应该如何更加直观的呈现该数据?

a = [“猩球崛起3:终极之战”,“敦刻尔克”,“蜘蛛侠:英雄归来”,“战狼2”]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]

简单编写代码如下:

from matplotlib import pylab as  plt
from matplotlib import font_manager
import matplotlib

# 中文设置
font = {'family' : 'MicroSoft YaHei',
        'weight': 'bold'}
matplotlib.rc("font",**font)

film_name = ["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
film_ticket_16 =  [15746,312,4497,319]
film_ticket_15 =  [12357,156,2045,168]
film_ticket_14 =  [2358,399,2358,362]

plt.figure(figsize=(20,15), dpi=80)

x_14 = list(range(len(film_name)))
x_15 = [i+0.2 for i in x_14]
x_16 = [i+0.2 for i in x_15]



# width为条形的宽度
plt.bar(x_14, film_ticket_14, width=0.2, label='14')
plt.bar(x_15, film_ticket_15, width=0.2, label='15')
plt.bar(x_16, film_ticket_16, width=0.2, label='16')

# 设置x刻度
plt.xticks(x_15,film_name)

# 显示图例
plt.legend()

plt.xlabel("票房:单位亿")
plt.xlabel("电影名称")
plt.title("票房统计")

plt.grid(0.4)

plt.show()


运行程序效果:

在这里插入图片描述

条形图的更多应用场景
数量统计
频率统计(市场饱和度)

猜你喜欢

转载自blog.csdn.net/weixin_43013761/article/details/89813911