文章目录
matplotlib简介
- 最流行的python底层绘图库,名字取材于matlab,模仿matlab构建;
- 能将数据进行可视化,更直观的呈现,使数据更加客观、更具说服力。
用matplotlib画折线图
例
from matplotlib import pyplot as plt
x = range(2, 26, 2) # 2,……24
y = [15, 12, 14, 18, 13, 16, 17, 15, 16.5, 18, 15, 16]
plt.plot(x, y, marker='o') # 可自定义绘图风格,制定线条颜色(color)、线条类型(linestyle)、粗细等
plt.grid(alpha=0.4) # 绘制网格,alpha为透明度,数值越小越透明
plt.show()
运行结果:
注:
- x、y应是可迭代对象;
- plot时可设置颜色和线条类型:
设置图片大小
plt.figure(figsize=(20, 8), dpi=80)
ctrl+b查看源码:
num:图像编号或名称,数字为编号,字符串为名称;
figsize:制定fig的宽和高,单位为英寸(1英寸=2.54cm);
dpi:图像分辨率,即每英寸多少个像素,缺省值为80;
facecolor:背景颜色;
edgecolor:边框颜色;
frameon:是否显示边框。
注:
matplotlib.pyplot是有状态的,亦即它会保存当前图片和作图区域的状态,新的作图函数会作用在当前图片的状态基础之上;要想绘制多个图,可在绘图之前进行plt.figure()的设置。
调整x轴、y轴刻度
plt.xticks(x)
plt.xticks(x)
plt.xticks(range(2, 25, 1), rotation=45) # 还可设置旋转角度
xtick_lables = [i/2 for i in range(4, 49)]
plt.xticks(xtick_labels)
plt.xticks(xtick_labels[::3]) #/ 当刻度太密集时用列表的步长(间隔取值)来解决
plt.yticks(range(min(y), max(y)+1)
设置中文显示
法一:
font = {'family': 'Microsoft YaHei',
'weight': 'bold',
'size':larger'} # 可查看matplotlib.rc源码
matplotlib.rc("font", **font)
matplotlib.rc('font', family='Microsoft YaHei', weight='Bold')
}
法二:
my_font = font_manager.FontProperties(fname = '/System./Library/Fonts/PingFang.ttc)
# plt.xticks 设置时加上fontproperties=my_font
添加描述信息(x、y的label、标题、图例)
plt.xlabel("时间", fontproperties=myfont)
plt.ylabel("温度", fontproperties=myfont)
plt.title("气温")
# 添加图例:plot时添加label;plt.legend
plt.plot(x,y1, label="我”)
plt.plot(x,y2, label="同桌”)
plt.legend(prop=my_font, loc="upper left") # 字体和位置
标注特殊点
保存图片
plt.savefig("./my_figure") # 可保存为svg这种矢量图格式,放大不会有锯齿
案例
# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15) # 宋体
x = range(0, 120)
y = [random.randint(20, 35) for i in range(120)]
plt.figure(figsize=(20, 8), dpi=80)
# 调整x轴刻度
xtick_labels = ['10点{}分'.format(i) for i in range(60)]
xtick_labels += ['11点{}分'.format(i) for i in range(60)]
plt.xticks(list(x)[::3], xtick_labels[::3], rotation=45, fontproperties=my_font)
# 添加描述信息
plt.xlabel('时间', fontproperties=my_font)
plt.ylabel('时间', fontproperties=my_font)
plt.title("10点到12点每分钟的气温变化情况", fontproperties=my_font)
plt.plot(x, y)
plt.show()
注:
散点图
# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)
y_3 = [random.randint(6, 23) for i in range(31)]
y_10 = [random.randint(12, 25) for i in range(31)]
x_3 = range(1, 32)
x_10 = range(51, 82)
# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
# 调整x轴的(显示)刻度
_x = list(x_3) + list(x_10)
xtick_labels = ["3月{}日".format(i) for i in x_3]
xtick_labels += ["10月{}日".format(i-50) for i in x_10]
plt.xticks(_x, xtick_labels, fontproperties=my_font, rotation=45)
# 画图
plt.scatter(x_3, y_3, label='三月')
plt.scatter(x_10, y_10, label='十月')
plt.legend(prop=my_font, loc='upper left')
plt.show()
运行结果:
条形图
# -*- coding:utf-8 -*-
from matplotlib import pyplot as plt
from matplotlib import font_manager
import random
my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=15)
a = ["猩球崛起", "终极之战", "伦敦克尔", "蜘蛛侠"]
b_16 = [15746, 312, 4497, 319]
b_15 = [12357, 156, 2045, 168]
b_14 = [2358, 399, 2358, 362]
bar_width = 0.2
x_14 = list(range(len(a)))
x_15 = [i + bar_width for i in x_14]
x_16 = [i + bar_width*2 for i in x_14]
# 设置图形大小
plt.figure(figsize=(20, 8), dpi=80)
plt.bar(range(len(a)), b_14, width=bar_width, label="9月14日")
plt.bar(x_15, b_15, width=bar_width, label="9月15日")
plt.bar(x_16, b_16, width=bar_width, label="9月16日")
# 设置图例
plt.legend(prop=my_font)
# 设置x轴的刻度
plt.xticks(x_15, a, fontproperties=my_font)
plt.show()
运行结果:
直方图
例:
其他
2. 用百度的echarts可以画很多非常炫酷的图表。