Python库-Matplotlib
Posted 傅余生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python库-Matplotlib相关的知识,希望对你有一定的参考价值。
Matplotlib官网https://matplotlib.org,Matplotlib是一个Python的2D绘图库。
可视化是整个数据分析的关键辅助工具,可以清晰的理解数据。
折线图(用于显示数据(数值型)的变化趋势,反应事物的变化情况)
简单实现
import matplotlib.pyplot as plt #导入模块 plt.plot([1,0,9],[4,5,6]) #.plot(x,y)绘制折线图的方法 plt.show() #显示图形
修改折线外观
from matplotlib import pyplot as plt x = range(1,8) y = [17,17,18,15,11,11,13] plt.plot(x,y,color = \'red\',alpha = 0.5,linestyle = \'--\',linewidth = 3,marker = \'*\') #.plot()方法绘制折线图 color修改颜色 alpha参数修改透明度(0,1) linewidth 改变线宽 linestyle 线的样式 marker改变折点样式 plt.show()
设置图片大小和保存图片(.figure()方法设置图片大小及分辨率,.savefig()方法保存图片)
from matplotlib import pyplot as plt import random x = range(2,26,2) y = [random.randint(15,30) for i in x] #.figure()方法设置图片大小和分辨率 plt.figure(figsize = (20,8),dpi = 80)#figsize代表图片大小 单位英寸 dpi代表每一英寸上的像素点 plt.plot(x,y) #绘制完成之后进行保存 plt.savefig(\'保存的路径\') plt.show() #show方法位于.savefig方法后
绘制x y轴刻度(通过.xticks(参数1,参数2)及.yticks(参数1,参数2)方法绘制xy轴刻度,参数1代表范围,参数2代表刻度格式)
from matplotlib import pyplot as plt import random x = range(2,26,1) y = [random.randint(15,30) for i in x] plt.figure(figsize = (20,8),dpi = 80) #设置x y 值刻度 xticks_lable = ["{}:00".format(i) for i in range(24)] plt.xticks(x,xticks_lable,rotation = 45) #x代表有多少刻度值 xticks_lable代表每个刻度上的值 rotation倾斜度数 yticks_lable = ["{}C".format(i) for i in range(min(y),max(y)+1)] plt.yticks(range(min(y),max(y)+1),yticks_lable) \'\'\' plt.xticks(x) plt.yticks(y) \'\'\' plt.plot(x,y) plt.show()
一图多线及中文显示
x = range(0,120) y1 = [random.randint(10,30) for i in x] y2 = [random.randint(10,30) for i in x] plt.figure(figsize = (20,8),dpi = 80) plt.plot(x,y1,linewidth = 3,label = \'自己\') plt.plot(x,y2,linewidth = 3,linestyle = \'--\',label = \'朋友\') #解决中文显示 from matplotlib import font_manager my_font = font_manager.FontProperties(fname = \'/System/Library/Fonts/PingFang.ttc\',size = 18) plt.xlabel(\'时间\',fontproperties = my_font)#.xlabel()添加x轴说明 plt.xlabel(\'次数\',fontproperties = my_font) plt.title(\'每分钟变化数\',fontproperties = my_font,color = \'red\') #图片名称 plt.grid(alpha = 0.4) #添加网格 plt.legend(prop = my_font,loc = \'lower left\') #添加图例 plt.show()
设置坐标轴范围
import matplotlib.pyplot as plt import numpy as np x = np.arange(-10,11,1) y = x ** 2 plt.plot(x,y) plt.xlim([-5,5])#调节x轴左右的显示范围 #plt.xlim(xmin = -4)#调节x轴左边最小值 #plt.xlim(xmax = 5)#调节x轴右边最大值 #plt.ylim(ymin = 0)#调节y轴最小值 plt.show()
改变坐标轴的显示方式
import matplotlib.pyplot as plt import numpy as np y = range(0,14,2) x = [-3,-2,-1,0,1,2,3] ax = plt.gca() #设置上下左右四个框线的颜色 ax.spines[\'right\'].set_color(\'none\') ax.spines[\'top\'].set_color(\'none\') ax.spines[\'left\'].set_color(\'red\') ax.spines[\'bottom\'].set_color(\'blue\') #设置框线位置 ax.spines[\'bottom\'].set_position((\'data\',0)) ax.spines[\'left\'].set_position((\'data\',0)) plt.plot(x,y) plt.show()
散点图(显示分布规律,判读变量之间是否存在关联趋势)
from matplotlib import pyplot as plt from matplotlib import font_manager y = [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] x = range(1,32) # 设置图形大小 plt.figure(figsize=(20,8),dpi=80) # 使用scatter绘制散点图 plt.scatter(x,y,label= \'3月份\') # 调整x轴的刻度 my_font = font_manager.FontProperties(fname=\'/System/Library/Fonts/PingFang.ttc\',size=10)
_xticks_labels = [\'3月{}日\'.format(i) for i in x] plt.xticks(x[::3],_xticks_labels[::3],fontproperties=my_font,rotation=45) #修改刻度 plt.xlabel(\'日期\',fontproperties=my_font) plt.ylabel(\'温度\',fontproperties=my_font) # 图例 plt.legend(prop=my_font) plt.show()
条形图(绘制离散的数据,比较数据(类别数据)之间差别)
纵向条形图
from matplotlib import pyplot as plt
from matplotlib import font_manager
a = [\'流浪地球\',\'疯狂的外星人\',\'飞驰人生\',\'大黄蜂\',\'熊出没·原始时代\',\'新喜剧之王\']
b = [\'38.13\',\'19.85\',\'14.89\',\'11.36\',\'6.47\',\'5.93\']
# b =[38.13,19.85,14.89,11.36,6.47,5.93]
my_font = font_manager.FontProperties(fname=\'/System/Library/Fonts/PingFang.ttc\',size=10)
plt.figure(figsize=(20,8),dpi=80)
# 绘制条形图.bar
rects = plt.bar(range(len(a)),[float(i) for i in b],width=0.3,color= \'red\') #返回包含每个条形的可跌代对象 width设置条形的宽度
plt.xticks(range(len(a)),a,fontproperties=my_font) #设置x轴刻度格式
plt.yticks(range(0,41,5),range(0,41,5))
# 在条形图上加标注(水平居中)
for rect in rects:
height = rect.get_height() #获取条形的高度
plt.text(rect.get_x() + rect.get_width() / 2, height+0.3, str(height),ha="center")
plt.show()
并列及罗列条形图
import matplotlib.pyplot as plt import numpy as np
index = np.arange(4) BJ = [50,55,53,60] Sh = [44,66,55,41] # 并列 plt.bar(index,BJ,width=0.3) plt.bar(index+0.3,Sh,width=0.3,color=\'green\') plt.xticks(index+0.3/2,index) # 罗列 # plt.bar(index,Sh,bottom=BJ,width=0.3,color=\'green\') plt.show()
直方图(与条形图相似,绘制连续性的数据展示和数据的分布情况)
# 绘制直方图
# 设置组距
distance = 2
# 计算组数
group_num = int((max(time) - min(time)) / distance)
# 绘制直方图
plt.hist(time, bins=group_num) #.hist方法绘制直方图,参数1为数据,参数2为组数
饼状图(不同分类的占比情况)
import matplotlib.pyplot as plt import matplotlib from matplotlib import font_manager my_font = font_manager.FontProperties(fname=\'/System/Library/Fonts/PingFang.ttc\',size=10) label_list = ["第一部分", "第二部分", "第三部分"] # 各部分标签 size = [55, 35, 10] # 各部分大小 color = ["red", "green", "blue"] # 各部分颜色 explode = [0, 0.05, 0] # 各部分突出值 """ 绘制饼图 explode:设置各部分突出 label:设置各部分标签 labeldistance:设置标签文本距圆心位置,1.1表示1.1倍半径 autopct:设置圆里面文本 shadow:设置是否有阴影 startangle:起始角度,默认从0开始逆时针转 pctdistance:设置圆内文本距圆心距离 返回值 l_text:圆内部文本,matplotlib.text.Text object p_text:圆外部文本 """
#.pie绘制饼状图,返回一个元组对象 patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.1, autopct="%1.1f%%", shadow=False, startangle=90, pctdistance=0.6) for t in l_text: t.set_fontproperties(my_font) plt.legend(prop=my_font) plt.legend() plt.show()
2020-03-22 16:58
以上是关于Python库-Matplotlib的主要内容,如果未能解决你的问题,请参考以下文章
一个Python函数解决散点图绘制——Matplotlib库示例
一个Python函数解决散点图绘制——Matplotlib库示例
一个Python函数解决各样式折线图绘制——Matplotlib库示例