Matplotlib

来自百合仙子's Wiki
跳转到导航 跳转到搜索

颜色

[1]

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() 的标题

[2]

  fig = plt.gcf()
  fig.canvas.set_window_title(title)

坐标轴

网格

[3]

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

参见

外部链接

参考资料