matplotlib的使用--折线图--入门

目录

matplotlib应用介绍

一天天气变化图

两小时随机温度图 

  中文显示问题

个人交往统计图

多人交往统计图

总结

 

 


 

介绍:

 

 

举个例子(一天天气变化图):

假设一天中每隔两个小时(range(2,26,2))的气温(℃)分别是[15,13,14.5,17,20,25,26,26,27,22,18,15],将其变成折线图进行展示

在windows中系统中展示的图片如图:

 

现在来优化代码:

设置图片大小

from matplotlib import pyplot as plt

x = range(2, 26, 2) 
y = [15,13,14.5,17,20,25,26,26,27,22,18,15] 

# figure图形图标的意思,这里只画的图
# 通过实例化一个figure并且传递参数,能够在后台自动使用该figure实例
# dpi 表示一个像素点的个数
plt.figure(figsize=(10, 7), dpi=80)

# 绘制折线图
plt.plot(x, y) 
# 保存(svg文件在浏览器中打开放大不会失帧)
plt.savefig('./sig_size.png')
# 展示图形
# plt.show() 

 

图片展示

设置x,y轴的数值
from matplotlib import pyplot as plt

x = range(2, 26, 2) 
y = [15,13,14.5,17,20,25,26,26,27,22,18,15] 

plt.figure(figsize=(10, 7), dpi=80)

plt.plot(x, y) 

# 单独设置x轴
# _xticks = range(2, 26, 2) # list(_xticks): [2,4,6,8...]
_xticks = [i/2 for i in range(4, 49)] # [2.0, 2.5, 3.0, 3.5 .....]
# 刻度太密集可以使用列表步长
plt.xticks(_xticks[::3])
# y轴利用数据最小值最大值进行设置范围(最大值需要+1才能取到值)
plt.yticks(range(min(y), max(y)+1))
plt.show() 

 

 举个例子(两小时随机温度图)

如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况?
a= [random.randint(20,35) for i in range(120)]

从逻辑上完成功能实现:

import random
from matplotlib import pyplot as plt

x = range(0, 120) 
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(16, 8), dpi=80)
plt.plot(x, y) 

# 设置x轴刻度
_xticks_label = ['10点{}分'.format(i) for i in range(60)]
_xticks_label += ['11点{}分'.format(i) for i in range(60)]
#rotation  旋转
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45)
plt.yticks(range(min(y), max(y)+1))
plt.show() 

 

 但是会发现字体出现问题

所以需要解决字体的显示问题

所以在windows,或者linux中,可能有效的办法:

import random
import matplotlib

from matplotlib import pyplot as plt

  # 这是windows和linux设置字体的方式
font = {
    'family': 'MicroSoft YaHei',
    'weight': 'bold',
    'size': 'larger'
}
matplotlib.rc("font", **font)
# 类似于matplotlib.rc("font", family='MicroSoft YaHei', weight='blod', size='larger')

x = range(0, 120) 
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(16, 8), dpi=80)
plt.plot(x, y) 

# 设置x轴刻度
_xticks_label = ['10点{}分'.format(i) for i in range(60)]
_xticks_label += ['11点{}分'.format(i) for i in range(60)]
#rotation  旋转
  #取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45)
plt.yticks(range(min(y), max(y)+1))
plt.show() 

 

 但是不保证成功,因为电脑的字体配置情况不同

第二种推荐的方法:

自己设置字体文件:(字体库下载)windows在 C:\Windows\Fonts\路径下就是字体文件

import random
import matplotlib

from matplotlib import pyplot as plt
from matplotlib import font_manager

# 另一种设置字体的方式
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")

x = range(0, 120) 
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(16, 8), dpi=80)
plt.plot(x, y) 

# 设置x轴刻度
_xticks_label = ['10点{}分'.format(i) for i in range(60)]
_xticks_label += ['11点{}分'.format(i) for i in range(60)]
#rotation  旋转
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font)
plt.yticks(range(min(y), max(y)+1))
plt.show() 

 

可以通过size属性设置字体大小:

plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=12)

再给折线图添加一些描述信息,就算完成了

import random
import matplotlib

from matplotlib import pyplot as plt
from matplotlib import font_manager

# 另一种设置字体的方式
my_font = font_manager.FontProperties(fname="./Hiragino Sans GB.ttc")

x = range(0, 120) 
y = [random.randint(20,35) for i in range(120)]
plt.figure(figsize=(14, 8), dpi=80)
plt.plot(x, y) 

# 设置x轴刻度
_xticks_label = ['10点{}分'.format(i) for i in range(60)]
_xticks_label += ['11点{}分'.format(i) for i in range(60)]
#rotation  旋转
#取步长,数字和字符串一一对应,数据的长度一样
plt.xticks(list(x)[::5], _xticks_label[::5], rotation=45, fontproperties=my_font, size=10)
plt.yticks(range(min(y), max(y)+1))

# 添加描述信息
plt.xlabel('时间', fontproperties=my_font, size=14)
plt.ylabel('温度(单位:℃)', fontproperties=my_font, size=14)
plt.title('10点到12点每分钟气温的变化情况', fontproperties=my_font, size=20)

plt.show() 

举个例子(个人交往统计图)

假设大家在30岁的时候,根据自己的实际情况,统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等
from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc')

x = range(11, 31)
y = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
plt.figure(figsize=(10, 7), dpi=80)
plt.plot(x, y)

_xtick_label = ['{}岁'.format(i) for i in x]
plt.xticks(x, _xtick_label, fontproperties=my_font)
# 辅助线
plt.grid(alpha=0.4) # 透明度
plt.xlabel('时间', fontproperties=my_font)
plt.ylabel('女朋友数(单位:个)', fontproperties=my_font)
plt.title('11到30岁之间谈过的女朋友的数量统计', fontproperties=my_font)

plt.show()

举个例子(多人交往统计图)

假设大家在30岁的时候,根据自己的实际情况,统计出来了你和你同桌各自从11岁到30岁每年交的女(男)朋友的数量如列表a和b,

请在一个图中绘制出该数据的折线图,以便比较自己和同桌20年间的差异,同时分析每年交女(男)朋友的数量走势

a = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
b = [1,0,3,1,2,2,3,3,2,1 ,2,1,1,1,1,1,1,1,1,1]
要求:
y轴表示个数
x轴表示岁数,比如11岁,12岁等

legend(loc=数字)

Location StringLocation Code
'best'0
'upper right'1
'upper left'2
'lower left'3
'lower right'4
'right'5
'center left'6
'center right'7
'lower center'8
'upper center'9
'center'10

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='./Hiragino Sans GB.ttc')

x = range(11, 31)
y1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y2 = [1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]
plt.figure(figsize=(10, 7), dpi=80)
plt.plot(x, y1, label='自己', color='r', linestyle='--')
plt.plot(x, y2, label='同桌', linewidth=5, alpha=0.8)
_xticks_label = ['{}岁'.format(i) for i in x]
plt.xticks(x, _xticks_label, fontproperties=my_font)
plt.grid(alpha=0.4)
# 添加图例
plt.legend(prop=my_font, loc=0)
plt.show()

 

 总结:

 

 

 

 

 


  

 

STXINGKA.TTF

转载于:https://www.cnblogs.com/pywjh/p/10742811.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值