matplotlib库的使用
继续分享自己的学习历程!
概念什么的就不说了,网上资料很多,那就直接开始说要点吧! 主要是五种绘图:折线图、散点图、直方图、条形图以及饼图。 以实例来说我觉得效果会更好。大部分注释说明都写在代码块里了。 其实无论是折线图也好还是散点图那些也好,基本要素的代码都是一模一样的,需要注意的只不过是一些细节而已。
导入就在终端用pip命令就好了,或者是直接在pycharm里输入
from matplotlib import pyplot as plt
如果没装这个库的话,在matplotlip下面会显示红线,将箭头放上去然后安装这个库就ok了。
导入方式:
from matplotlib import pyplot as plt
折线图:
实例一: 就比如举个列子来说,我们来绘制自己和自己的好兄弟从11岁到20岁的每年交女朋友的情况(只是举例,并非事实哈,嘿嘿):
x = ["{}岁".format(i) for i in range(11,21)]
y_1 = [1,0,1,1,2,4,3,2,3,4]
y_2 = [1,2,2,1,3,3,4,5,2,5]
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["font.size"] = 10
plt.figure(figsize=(15, 8),dpi=80)
plt.plot(x,y_1,label="自己",color="orange",linestyle="-.",linewidth=2)
plt.plot(x,y_2,label="同桌",color="cyan",linestyle="-.")
plt.xlabel("年龄")
plt.ylabel("女朋友个数")
plt.title("每年交女朋友个数趋势图")
plt.yticks(range(0,9))
plt.grid(alpha=0.4,linestyle=":")
plt.legend()
plt.savefig("./t1.png")
plt.show()
这里的显示中文标签也有别的方法,但是我觉得这样写是最简单的了。 运行的效果如图: 实例二:比实例一复杂一些,其中一些函数也稍微难理解一些。
from matplotlib import pyplot as plt
import random
x = range(0, 120)
y = [random.randint(20,30) for i in range(120)]
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["font.size"] = 10
plt.figure(figsize=(15, 8),dpi=80)
plt.plot(x,y)
_xtick_labels = ["10点{}分".format(i) for i in range(60)]
_xtick_labels += ["11点{}分".format(i) for i in range(60)]
plt.xticks(list(x)[::3], _xtick_labels[::3], rotation=45)
plt.xlabel("时间")
plt.ylabel("气温")
plt.title("10点到12点间气温变化图")
plt.grid(alpha=0.1)
plt.show()
运行结果如下:
散点图:
区别在于散点图使用plt.scatter()来传入的参数。
折线图有详细的注释了,下面的实例就不在做解释了,极个别的会再注释来说明。
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
y_3 = [11,17,16,11,12,11,12,6,6,7,8,9,12,14,15,17,18,20,16,17,20,14,15,15,15,19,21,22,22,22,23]
y_10 = [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]
x_3 = range(1,32)
x_10 = range(51,82)
plt.figure(figsize=(15,8),dpi=80)
plt.scatter(x_3,y_3,label="3月份")
plt.scatter(x_10,y_10,label="10月份")
_x = list(x_3)+list(x_10)
_xtick_lables = ["3月{}日".format(i) for i in x_3]
_xtick_lables += ["10月{}日".format(i-50) for i in x_10]
plt.xticks(_x[::3], _xtick_lables[::3], rotation=45)
plt.legend()
plt.xlabel("日期")
plt.ylabel("温度℃")
plt.title("每日气温图")
plt.show()
运行结果如下:
柱状图
我觉得条形图和直方图合起来就是柱状图了,哈哈。特别像。 这里用的是plt.bar()
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
a = ["战狼","速度与激情8","羞羞的铁拳","前任3:\n再见前任","功夫瑜伽","西游伏妖篇","变形金刚5:\n最后的骑士","芳华","摔跤吧!爸爸","寻梦环游记","加勒比海盗5:\n死无对证","金刚:骷髅岛","极限特工:\n终极回归","生化危机6:\n终章","乘风破浪","神偷奶爸3","智取威虎山","蜘蛛侠:\n英雄归来","大闹天竺","雷神3:\n诸神黄昏"]
b = [56.39,26.49,21.9,19.26,17.53,16.49,15.45,14.11,12.96,12.02,11.8,11.61,11.28,11.61,11.28,11.12,10.38,10.3,8.74,7.67]
plt.figure(figsize=(15,8),dpi=80)
plt.bar(range(len(a)),b,width=0.3)
plt.xticks(range(len(a)),a,rotation=45)
plt.savefig("./1.png")
plt.show()
运行结果: 下面用的是plt.barh():
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
a = ["战狼","速度与激情8","羞羞的铁拳","前任3:再见前任","功夫瑜伽","西游伏妖篇","变形金刚5:最后的骑士","芳华","摔跤吧!爸爸","寻梦环游记","加勒比海盗5:死无对证","金刚:骷髅岛","极限特工:终极回归","生化危机6:终章","乘风破浪","神偷奶爸3","智取威虎山","蜘蛛侠:英雄归来","大闹天竺","雷神3:诸神黄昏"]
b = [56.39,26.49,21.9,19.26,17.53,16.49,15.45,14.11,12.96,12.02,11.8,11.61,11.28,11.61,11.28,11.12,10.38,10.3,8.74,7.67]
plt.figure(figsize=(15,8),dpi=80)
plt.barh(range(len(a)),b,height=0.3,color="orange")
plt.yticks(range(len(a)),a)
plt.grid(alpha=0.3)
plt.savefig("./2.png")
plt.show()
运行结果: 用柱状图来作比较看着是特别舒服的:
from matplotlib import pyplot as plt
plt.rcParams["font.sans-serif"] = ["SimHei"]
a = ["猩球崛起3:中级之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16 = [15746,312,4497,319]
b_15 = [12357,156,2045,168]
b_14 = [2358,399,2358,362]
bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i+bar_width for i in x_14]
x_16 = [i+bar_width*2 for i in x_14]
plt.figure(figsize=(15,8),dpi=80)
plt.bar(range(len(a)),b_14,width=bar_width,label="9月14日")
plt.bar(x_15,b_15,width=bar_width,label="9月15日")
plt.bar(x_16,b_16,width=bar_width,label="9月16日")
plt.legend()
plt.xticks(x_15,a)
plt.show()
运行结果:
饼图
用的是plt.pie() 饼图是和其他几个相对来说细节区别最多的了。
from matplotlib import pyplot as plt
plt.rcParams["font.family"] = "FangSong"
plt.rcParams["font.size"] = 18
x = [8, 7, 3, 6]
labels = ["工作", "睡觉", "吃饭", "玩乐"]
plt.figure(figsize=(15,8),dpi=80)
plt.pie(x,
explode=[0, 0.1, 0.2, 0.1],
labels=labels,
labeldistance=1.1,
radius=1.2,
colors=["b", "r", "y", "g"],
autopct="%.2f%%",
shadow=True
)
plt.title("一天时间分配比重饼状图")
plt.show()
运行结果: 绘制什么图要根据适当的类型来选择最合适的,这样才能最大化的利用起来,也能够更好的展示你想要的结果。
文章可能有解释不当或者错误的地方,欢迎交流!
以上的学习历程是我在b站上跟着视频以及查资料学习后整理的,不得不说b站真的是个好东西啊!让我学到了很多东西。
继续坚持,加油吧!
|