初识Matplotlib--python2D绘图库,刻度颜色等。分为折线图、散点图、条形图、饼图等

1、导入库

在cmd里执行pip install matplotlib

2、常用功能,如颜色、刻度、标题,中文

2.1展示图形
# 导入模块
import matplotlib.pyplot as plt
# 在jupyter中执行的时候显示图片(其他不用写)
%matplotlib inline  
# 传入x和y, 通过plot画图
plt.plot([1, 0, 9], [4, 5, 6])
# 在执行程序的时候展示图形
plt.show()

在这里插入图片描述

2.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.2,linestyle = '--',linewidth=3,marker='o') 
plt.show()

在这里插入图片描述

2.3保存图片

注意:save要在show之前使用。否则保存的为空图。
show后会清空资源

from matplotlib import pyplot as plt
import random
x = range(2,26,2) 
y = [random.randint(15, 30) for i in x]
# # 根据画布对象
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)  
plt.savefig('./cai.png')     #指定路径:plt.savefig('D:/cai.png') 
plt.show()

1)figsize:指定figure的宽和高,单位为英寸;
2)dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80 1英寸等于2.5cm,A4纸是 21*30cm的纸张
3)图片的格式也可以保存为svg这种矢量图格式,这种矢量图放在网页中放大后不会有锯齿

 plt.savefig('./cai.svg')
2.4、横轴纵轴的刻度

理解一下:plt.xticks(x) #列表
#刻度显示的个数,如从2开始显示,2、4、6、8依次显示,相当于把整个列表里的值显示在x轴

#xticks(x,x_ticks_label)中第一参数代表刻度即分成了多少份,第二个参数是在每个刻度上 真正显示的内容(刻度值)。若没有第二个参数,解释如上

from matplotlib import pyplot as plt
x = range(2,26,2) 
y = [random.randint(15, 30) for i in x]
#画布大小
plt.figure(figsize=(20,8),dpi=80)
# 设置x轴的刻度
plt.xticks(x)       #列表
#刻度显示的个数,如从2开始显示,2、4、6、8依次显示,相当于把整个列表里的值显示在x轴

# 设置y轴的刻度
# plt.yticks(y)
# y(11,30)
plt.yticks(range(min(y),max(y)+1))

# 构造x轴刻度标签
x_ticks_label = ["{}:00".format(i) for i in x] 
# #rotation = 45 让字旋转45度
#xticks中第一参数代表刻度即分成了多少份,第二个参数是在每个刻度上 真正显示的内容(刻度值)
plt.xticks(x,x_ticks_label,rotation = 60)
# # 设置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()

在这里插入图片描述

2.5坐标信息、标题(中文显示方法)

1)中文:使用matplotlib中的font_manager库,单独导入
其中Windows的中文字体路径C:\Windows\Fonts\ (使用对应字体时,右键属性,复制其文件名即可)
2)坐标信息
plt.xlabel plt.ylabel 后面跟坐标信息内容
3)标题
plt.title 后面跟标题内容
下面看代码:

from matplotlib import pyplot as plt
import random
from matplotlib import font_manager
#显示中文
x= range(0,200)
y=[random.randint(10,30) for i in x]
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)
#获取一种字体,赋给my_font变量
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf',size=18)
#添加坐标信息
plt.xlabel('时间',fontproperties=my_font,rotation=45)
plt.ylabel('天气',fontproperties=my_font)
#添加标题信息
plt.title('次数',fontproperties=my_font,color='red',size=30)
plt.show()

在这里插入图片描述

2.6添加图例(多线的时候,标注每条线是干嘛的)

plt.legend(prop=my_font,loc=‘upper right’)
只有图例使用prop获取中文其他都是fontproperties
loc参数用来获取图例的位置,有‘upper left/lower left/center left/upper center’等
PS;网格plt.grid

from matplotlib import pyplot as plt
from matplotlib import font_manager
x= range(0,10)
y1=range(0,10)
y2=range(5,15)
plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y1,color='red',label='小花')
plt.plot(x,y2,color='blue',label='小爱')
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf',size=18)
plt.legend(prop=my_font,loc='upper right')
plt.grid(alpha=1)
plt.show()

在这里插入图片描述

3、散点图

x=range(0,5)
y=[3,7,2,8,9]
plt.scatter(x,y)
plt.show()

在这里插入图片描述

4、条形图

坑一:绘图时不识别字符串类型的数据,会使用列表的下标绘图

#错误示例,使用字符串类型,导致数据错误使用下标绘图
from matplotlib import pyplot as plt
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]
plt.figure(figsize=(20, 8), dpi=80)
plt.bar(range(len(a)), b, width=0.3, color='red')
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]
plt.figure(figsize=(20, 8), dpi=80)
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf',size=18)
#设置x,y轴刻度和刻度值
plt.xticks(range(len(a)), a, fontproperties=my_font)
plt.yticks(range(0, 41, 5), range(0, 41, 5))
rects=plt.bar(range(len(a)), [float(i) for i in b], width=0.3, color='red')
#条形图上加标注(居中)
for rect in rects:
    # 获取每条数据的height值(y)
    height = rect.get_height()
    # 显示文本值,长为x(此处x为柱的左边)+宽度的一半,即柱的正中间;高度加一点代表在空白处标注
    plt.text(rect.get_x() + rect.get_width() / 2, height + 0.3, str(height), ha="center")
plt.show()

5、并列条形图

画两个条形图,第二个图的起始x值为,第一个图的起始x值+宽度

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()

在这里插入图片描述

6、饼状图

返回值:
patches : matplotlib.patches.Wedge列表(扇形实例)
l_text:label matplotlib.text.Text列表(标签实例)
p_text:label matplotlib.text.Text列表(百分比标签实例)

import matplotlib.pyplot as plt
import matplotlib
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simkai.ttf',size=18)

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:设置圆内文本距圆心距离
返回值:
patches : matplotlib.patches.Wedge列表(扇形实例)
l_text:label matplotlib.text.Text列表(标签实例)
p_text:label matplotlib.text.Text列表(百分比标签实例)
"""
plt.figure(figsize=(10, 10), dpi=100)  #画布不是正方形的话,画出的图就是椭圆
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:
    print(dir(t))   #查看所有可使用的方法
    # 给标签对象设置中文
    t.set_fontproperties(my_font)
# p_text 扇形里面的标签值
for t in p_text:
    t.set_size(18)
#    patches 返回扇形实例
for i in patches:
    i.set_color('pink')
    break   
    #break的作用是取出第一个并改变颜色后,立刻跳出;不加的话,所有扇形都被改为pink

plt.legend(prop=my_font)
plt.show()

在这里插入图片描述

7、总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值