Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。可用于Python脚本,只需几行代码就可以生成图表、直方图、功率谱、条形图、误差图、散点图等。
不多废话,直接开搞。
安装方法如下:
pip install matplotlib
一、Matplotlib画图简单实现折线图
1.折线图的绘制:
from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13] #传入x和y,通过plot画折线图
plt.plot(x,y)
plt.show()
这样画出来的图感觉太单调了,那么给它配点颜色和形状吧:
2.折线的颜色和形状设置如下:
from matplotlib import pyplot as plt
x = range(1,8) # x轴的位置
y = [17, 17, 18, 15, 11, 11, 13] #传入x和y,通过plot画折线图
plt.plot(x, y, color='red',alpha=0.5,linestyle='--',linewidth=3)
plt.show()
得出以下图例:
3.基础属性设置为:
color='red' :折线的颜色
alpha=0.5:折线的透明度(0-1)
linestyle='--' :折线的样式
linewidth=3:折线的宽度
其中的线的样式为:
-实线(solid)
--短线(dashed)
-.短点相间线(dashdot)
:虚点线(dotted)
4.图片的大小和保存方法如下:
from matplotlib import pyplot as plt
import random
x = range(2,26,2) # *x轴的位置*
y = [random.randint(15, 30) for i in x] #*设置图片的大小*
#*设置画布对象,figsize中对应的单位是英寸,dpi是每英寸有多少像素点*
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y) #*传入x和y,通过plot画图*
#plt.show()
plt.savefig('./t1.png')
#*图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿*
# plt.savefig('./t1.svg')
5.绘制x轴和y轴的刻度:
from matplotlib import pyplot as plt
import random
*x = range(2,26,2)* #*x轴的位置*
y = [random.randint(15, 30) for i in x]
plt.figure(figsize=(20,8),dpi=80)
#*设置x轴的刻度*
#* plt.xticks(x)*
# *plt.xticks(range(1,25))*
#*设置y轴的刻度*
#*plt.yticks(y)*
#*plt.yticks(range(min(y),max(y)+1))*
#*构造x轴刻度标签*
x_ticks_label = ["{}:00".format(i) for i in x]
#rotation = 45让字旋转45度
plt.xticks(x,x_ticks_label,rotation = 45)
#*设置y轴的刻度标签*
y_ticks_label = ["{}℃".format(i) for i in range(min(y),max(y)+1)]
plt.yticks(range(min(y),max(y)+1),y_ticks_label)
#*绘图*
plt.plot(x,y)
plt.show()
得到以下图例:
6.设置显示中文:
#*matplotlib只显示英文,无法显示中文,需要修改matplotlib的默认字体(现在版本直接就可以显示)*
#*通过matplotlib下的font_manager可以解决*
#*两个小时内的每分钟跳动变化*
from matplotlib import pyplot as plt
import matplotlib
import random
x = range(0,120)
y = [random.randint(10,30) for i in range(120)]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y) # *加坐标轴信息*
# *在有中文输出的地方,增加一个属性: fontproperties*
#*比如 plt.xlabel('时间',fontproperties = 'simHei',fontsize=20)*
#*rotation 将字体旋转 45 度*
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=18)
plt.xlabel('时间',rotation=45,fontproperties = my_font)
plt.ylabel("次数",fontproperties = my_font)
# *设置标题*
plt.title('每分钟跳动次数',fontproperties = my_font,color='red')
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='C:\Windows\Fonts\STSONG.TTF', 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
my_font =font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=16)
a = ['流浪地球','疯狂的外星人','飞驰人生','大黄蜂','熊出没·原始时代','新喜剧之王']
b = [38.13,19.85,14.89,11.36,6.47,5.93]
plt.figure(figsize=(20,8),dpi=80)
# 绘制条形图的方法
'''
*width=0.3条形的宽度*
'''
rects = plt.bar(range(len(a)),b,width=0.3,color='r')
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=45)
# 在条形图上加标注(水平居中)
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()
如图:
四、绘制直方图:
#* 1)准备数据*
time = [131,98,125,131,124,139,131, 117, 128,108,135,138,131, 102,107, 114,119,128,121,142,127,130,124,101,110,116,117,110,128,128,115,99,136,126,134,95,138,117,111,78,132,124,113,150,110,117,86,95,144,105,126,130,126,130,126,116,123,106,112,138,123,86,101,99,136,123,117,119,105,137,123,128,125,104,109,134,125,127,105,120,107,129,116,108,132,103,136,118,102,120,114,105,115,132,145,119,121,112,139,125,138,109,132,134,156,106,117,127,144,139,139,119,140,83,110,102,123,107,143,115,136,118,139,123,112,118,125,109,119,133,112,114,122,109,106,123,116,131,127,115,118,112,135,115,146,137,116,103,144,83,123,111,110,111,100,154,136,100,118,119,133,134,106,129,126,110,111,109,141,120, 117, 106, 149, 122, 122, 110, 118, 127, 121, 114, 125, 126,114, 140, 103,130,141,117,106,114,121,114,133,137,92,121,112,146,97,137,105,98,117,112,81,97,139,113,134,106,144,110,137,137,111,104,117,100,111,101,110,105,129,137,112,120,113,133,112,83,94,146,133,101,131,116,111,84,137,115,122,106,144,109,123,116,111,111,133,150]
from matplotlib import font_manager
from matplotlib import pyplot as plt
my_font =font_manager.FontProperties(fname='C:\Windows\Fonts\STSONG.TTF',size=18) # *2) 创建画布*
plt.figure(figsize=(20, 8), dpi=100) # *3)绘制直方图*
#* 设置组距*
distance = 2
# *计算组数*
group_num = int((max(time) - min(time)) / distance) # 绘制直方图
plt.hist(time, bins=group_num)
# *修改 x 轴刻度显示*
plt.xticks(range(min(time), max(time))[::2])
# *添加网格显示*
plt.grid(linestyle="--", alpha=0.5)
#*添 加 x,y 轴 描 述 信 息*
plt.xlabel("电影时长大小",fontproperties=my_font)
plt.ylabel("电影的数据量",fontproperties=my_font)
# *4)显示图像*
plt.show()
五、绘制饼状图:
import matplotlib.pyplot as plt
import matplotlib
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:圆外部文本"""
matplotlib.rcParams['font.sans-serif']=['SimHei']
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)
plt.axis("equal")# 设置横轴和纵轴大小相等,这样饼才是圆的
plt.legend()
plt.show()
如图:
好了,本期的Python画图matplotlib分享就到这里啦,如果您感觉不错的话,您的分享就是对我们的最大支持QaQ!