Matplotlib
跳转到导航
跳转到搜索
颜色
import matplotlib.pyplot as plt
import numpy
ax1 = fig.add_subplot('111')
colormap = plt.cm.nipy_spectral # or Set1
ax1.set_color_cycle([colormap(i) for i in np.linspace(0, 1, count)])
文本
设置默认字体:
plt.rcParams['font.family'] = "STXihei"
时间格式
import matplotlib.dates as md
xfmt = md.DateFormatter('%m-%d %H:%M:%S')
ax1.xaxis.set_major_formatter(xfmt)
图例
handles = []
for k, X, Y in data:
h = ax1.plot(X, Y, label=k)[0]
handles += h
plt.legend(handles=handles, framealpha=0.5, fontsize=11)
或者
handles = []
for ... in data.items():
X = []
Y = []
...
handles.append(plt.plot(X, Y, label=sender)[0])
plt.minorticks_on() # 更细致的网格
plt.grid(which='minor', linestyle=':', linewidth='0.5', color='gray')
plt.grid()
plt.legend(handles=handles, framealpha=0.5, fontsize=24)
标题
plt.show() 的标题
fig = plt.gcf()
fig.canvas.set_window_title(title)
坐标轴
网格
plt.minorticks_on()
plt.grid(which='minor', linestyle=':', linewidth=0.5, color='gray')
plt.grid()
标签
plt.xlabel('X')
plt.ylabel('Y')
示例
时间↦数据曲线图
#!/usr/bin/env python3
import shelve
from matplotlib import pylab as pl
from matplotlib import pyplot as plt
from matplotlib import ticker
store = shelve.open('stats')
d = store['querying_time']
# {(day, hour): count}
x, y = zip(*sorted(d.items()))
xticks = ['%d/%02d' % i for i in x]
x = [i[0] * 24 + i[1] for i in x]
fig = plt.figure(figsize=(16, 9))
plt.grid()
tick_step = 5
plt.xticks(x[::tick_step], xticks[::tick_step], size=9)
plt.plot(x, y)
plt.title('查询数随时间变化图', fontproperties='STXihei')
plt.ylabel('查询数', fontproperties='STXihei')
plt.xlabel('日/时', fontproperties='STXihei')
# 自动调整 ticks 显示方式,如果太挤则倾斜显示
fig.autofmt_xdate()
plt.savefig("query_time.png")
plt.show()
小时↦数据柱状图
#!/usr/bin/env python3
import json
import sys
import matplotlib
import matplotlib.pyplot as plt
class HourFormatter(matplotlib.ticker.Formatter):
def __init__(self, hours):
self.hours = hours
def __call__(self, v, pos=None):
try:
return self.hours[int(v)]
except IndexError:
return (self.hours[-1] + 1) % 24
def main():
data = json.load(sys.stdin)['data']
hours, Y = zip(*((x['time'], x['pm25']) for x in data))
X = range(len(Y))
ax = plt.subplot(111)
ax.xaxis.set_major_formatter(HourFormatter(hours))
ax.bar(X, Y)
plt.show()
if __name__ == '__main__':
main()
直方图
时间↦数量:
import datetime
import numpy
def datehist(tss, n):
hist, bin_edges = numpy.histogram(tss, n)
X = [datetime.datetime.fromtimestamp(x) for x in bin_edges[:-1]]
return X, hist
一次三图带滑动平均
fig, axes = plt.subplots(3)
fig.suptitle(f'{pkg} 打包数据')
for i, (Y, formatter, title) in enumerate(
[(Y_t, timelen_fmt, '编译耗时'), (Y_cpu, timelen_fmt, 'CPU 时间'), (Y_mem, filesize_fmt, '内存占用')]
):
ax = axes[i]
ax.set_ylim(bottom=0, top=max(Y))
ax.yaxis.set_major_formatter(formatter)
ax.title.set_text(title)
ax.plot(X, Y)
ax.plot(X, pd.Series(Y).rolling(window=20).mean())
ax.minorticks_on() # 更细致的网格
ax.grid(which='minor', linestyle=':', linewidth='0.5', color='gray')
ax.grid()
参见
外部链接
- Cookbook/Matplotlib
- Matplotlib tutorial
- The Architecture of Open Source Applications (Volume 2): matplotlib