目录
Matplotlib简介
条形图
折线图
散点图
Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的输出格式。
Matplotlib 可以用来绘制各种静态,动态,交互式的图表。
Matplotlib 是一个非常强大的 Python 画图工具,我们可以使用该工具将很多数据通过图表的形式更直观的呈现出来。
Matplotlib 可以绘制线图、散点图、等高线图、条形图、柱状图、3D 图形、甚至是图形动画等等。
这是某些受欢迎电影的销量数据
a = ["战狼","速度与激情","功夫瑜伽","变形金刚","最后的骑士","摔跤吧","加勒比海盗","生化危机","金刚狼","蜘蛛侠"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12] 单位: 亿
方法一: 使用条形图,垂直方向展示
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = '/System/Library/Fonts/PingFang.ttc')
a = ["战狼","速度与激情","功夫瑜伽","变形金刚","最后的骑士","摔跤吧","加勒比海盗\n牙买加","生化危机","金刚狼","蜘蛛侠"] #若电影名太长,可在其中间加入\n进行换行分割
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12]
plt.figure(figsize=(12,8) , dpi=100)
#就此处不一样
plt.bar(range(len(a)) , b , width=0.3) # def bar(x轴显示内容 , height , width=0.8), width控制条形图'条的粗细';
#设置字符串在x轴上
plt.xticks( range(len(a) ), a , rotation=30 , fontproperties= my_font )
#plt.savefig('./电影.jpg')
plt.xlabel('电影名' , fontproperties= my_font)
plt.ylabel('单位:亿元' , fontproperties= my_font)
plt.title('电影销量统计' , fontproperties= my_font)
plt.show()
方法二: 使用条形图,水平方向展示
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname = '/System/Library/Fonts/PingFang.ttc')
a = ["战狼","速度与激情","功夫瑜伽","变形金刚","最后的骑士","摔跤吧","加勒比海盗\n牙买加","生化危机","金刚狼","蜘蛛侠"]
b = [56.01,26.94,17.53,16.49,15.45,12.96,11.8,11.61,11.28,11.12]
plt.figure(figsize=(15,8) , dpi=100)
plt.barh(range(len(a)) , b , height=0.2 , color='orange') # def barh(y轴显示内容, width, height=0.8) height控制线条粗细
#设置字符串在x轴上
plt.yticks(range(len(a)), a ,fontproperties= my_font)
#plt.savefig('./电影.jpg')
plt.grid(alpha=0.25 )
plt.xlabel('单位:亿元' , fontproperties= my_font)
plt.ylabel('电影名' , fontproperties= my_font)
plt.title('电影销量统计' , fontproperties= my_font)
plt.show()
统计出你与同桌个子从11岁到30岁每年交朋友数量,如列表y_1和列表y_2,请在1个图中绘制出该折线图:
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
要求:
x轴表示岁数,比如11岁,12岁等
y轴表示个数
from matplotlib import pyplot as plt
from matplotlib import font_manager
x = range(11,31)
y_1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
my_font = font_manager.FontProperties(fname = '/System/Library/Fonts/PingFang.ttc')
plt.figure( figsize=(13,8) , dpi=100 ) # 设置图片大小
plt.plot(x , y_1 , label='自己' , color='cyan' , linestyle='-' , linewidth=3 ) # 有label后得在下方添加图例 , 不然标记不显示
plt.plot(x , y_2 , label='同桌',color='r',linestyle='--')
#设置x轴刻度
_xtick_labes = ['{}岁'.format(i) for i in range(11,31)] # 对x轴字符串进行处理
plt.xticks(x, _xtick_labes, fontproperties=my_font)
#绘制网格
plt.grid( alpha=0.15 , color='c' , linewidth=0.5 ) # 透明度alpha为0~1【其它方面控制线条】
#plt.yticks(range(0,7,1)) # 控制y的刻度
#添加图例【为上边函数plot()中label=="自己、同桌" 添加图例】
plt.legend( loc='upper left' , prop=my_font ) # 只有这1块用prop=... ;loc='图例在折线图中的位置'
plt.xlabel('年龄' , fontproperties=my_font)
plt.ylabel('数量' , fontproperties=my_font)
plt.title('交朋友折线统计图' , fontproperties=my_font)
plt.show()
例:北京最高气温
以下是北京2022年3,10月份每天的最高气温(分别位于列表a,b),那么此时如何寻找出气温和随时间(天)变化的某种规律?
y_3 = [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]
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]
from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='/System/Library/Fonts/PingFang.ttc')
x_3 = range(1,32) # 天数
x_10 = range(51,82)
y_3 = [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]
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]
#设置图形大小
plt.figure( figsize=(13,8) , dpi=100 )
#使用scatter()绘制散点图,与之前plot()绘制折线图,这是两者的唯一区别
plt.scatter(x_3,y_3 , label='3月份') # 添加了label后,得有下边图例才能显示
plt.scatter(x_10,y_10 , label='10月份')
#若加上以下这2行后,会将以上的'散点图'的点连接起来,成为了'折线图'
#plt.plot(x_3,y_3)
#plt.plot(x_10,y_10)
#调整x轴的刻度
_x = list(x_3) + list(x_10)
_xtrick_label = [ '3月{}日'.format(i) for i in x_3 ]
_xtrick_label += [ '10月{}日'.format( i-50 ) for i in x_10 ]
plt.xticks(_x[::3] , _xtrick_label[::3] , rotation=45 , fontproperties=my_font ) # [::3]表示控制取步长
#添加图例
plt.legend( loc='upper left' , prop=my_font )
#添加描述信息
plt.xlabel('时间',fontproperties=my_font)
plt.ylabel('温度',fontproperties=my_font)
plt.title('北京3月、10月最高气温展示',fontproperties=my_font)
plt.show()