使用matplotlib绘图

零、简介

Matplotlib是一个Python工具箱,用于科学计算的数据可视化。借助它,Python可以绘制如Matlab和Octave多种多样的数据图形。

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序。因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定。

Matplotlib具有Matlab的语法、python语言、latex的画图质量(还可以使用内嵌的latex引擎绘制的数学公式)。


一、安装

sudo apt-get install python-matplotlib

二、常用代码

1、画折线图

#coding=utf-8

import numpy as np
import matplotlib.pyplot as plt
# from matplotlib import pyplot as plt

(y1, y2) = np.loadtxt('/tmp/test.txt', delimiter=',', usecols=(0, 3), unpack=True)
N = len(y1)
x = range(N)
x_ticks = range(0, N, 100)
y_ticks = np.arange(min(min(y1), min(y2)), max(max(y1), max(y2)), 0.2)

# 设置图片大小,figsize设置图片大小,dpi设置清晰度
# plt.figure(figsize=(35, 22), dpi=72)
plt.grid()
# plt.grid(axis="x", c='r', ls='--')
# plt.grid(axis='both', linewidth=0.5)
plt.title("Title", fontsize=24)
plt.xlabel('xlabel', fontsize=14)
plt.ylabel('ylabel', fontsize=14)
plt.xticks(x_ticks, rotation=70) # 设置x轴的刻度
# plt.xticks(scale*index, date, rotation=70)
plt.yticks(y_ticks) # 设置y轴的刻度
plt.ylim(0, 1) # plt.ylim((0, 1))

plt.hlines(y, xmin, xmax, color="red") # 画横线
plt.vlines(x, ymin, ymax, color="green") # 画竖线

plt.plot(x, y1, label='y1')
plt.plot(x, y2, label='y2')
plt.legend(loc='upper right', numpoints=4, markerscale=4) # 图例
# p1, = plt.plot(x, y1)
# p2, = plt.plot(x, y2)
# plt.legend([p1, p2], ["y1", "y2"], loc="upper right")
plt.show() # 显示
# plt.savefig('./test.jpg') #保存
# plt.clf()

2、画柱状图

#coding=utf-8

import numpy as np
import matplotlib.pyplot as plt

label = ['a', 'b', 'c', 'd', 'e']
y = [6.5, 8, 2, 9, 1]
x = range(len(y))

plt.xticks(x, label)
plt.bar(x, y, align = 'center', color='steelblue', alpha = 0.8)
for xx, yy in zip(x, y):
  plt.text(xx, yy + 0.1, str(yy), ha='center', va='bottom', fontsize=10) # ha,va默认左下,规定文本下边沿中点的坐标的位置
plt.show()

plt.yticks(x, label)
plt.barh(x, y, align = 'center', color='steelblue', alpha = 0.8)
# plt.bar(x, y, width=width, label='label', tick_label="a", fc='#87CEFA')
for xx, yy in zip(x, y):
  plt.text(yy + 0.1, xx, str(yy), ha='center')
  # plt.text(yy + 0.1, xx, '%.2f' % int(y))
  # plt.text(yy + 0.1, xx, '%.2f' %float(y))
plt.show()

3、画直方图

#coding=utf-8

import numpy as np
import matplotlib.pyplot as plt

d = [-1, 0, -1, 1, -2, 0, -1]
# 频数分布
plt.hist(d, np.linspace(-2, 2, 5), alpha=0.8, color='blue')
plt.show()
# 频率分布
plt.hist(d, np.linspace(-2, 2, 5), normed=True)
plt.show()

4、其他

plt.axis([0, 1100, 0, 1100000])
plt.tick_params(axis='both', labelsize=14)
plt.xlim(0, max((index+1)*scale))
plt.ylim(0, max(y)*1.1)
plt.scatter(x4, y4, color='red', marker='+', s=20, edgecolor='red')
plt.savefig("3.png", bbox_inches='tight')

np.histogram(a,bins =  [0,20,40,60,80,100])
hist,bins = np.histogram(a,bins =  [0,20,40,60,80,100])

# 建立 subplot 网格,高为 2,宽为 1
# 激活第一个 subplot
plt.subplot(2,  1,  1) #两行一列,这是第一个图

plt.axhline(y=0.5, color="r", linestyle=":", label="reference_y")
plt.axvline(x=5, ls="--", c="black", alpha=0.5, label="reference_x")

参考:

官网例子:https://matplotlib.org/gallery/index.html#

Matplotlib 中文文档(例子)

Top 50 matplotlib Visualizations – The Master Plots (with full python code)

Matplotlib可视化最有价值的50个图表(附完整Python源代码)(上文翻译-机器之心)


三、重要函数解析

1、plot方法参数详解:

==> 线相关参数

(1)color(或c)关键字用来设置线的颜色,可取值为:

(a)颜色全称或简写

简写全称描述
'b''blue'蓝色
'g''green'绿色
'r''red'红色
'c''cyan'青色
'm''magenta'品红色
'y''yellow'黄色
'k''black'黑色
'w''white'白色

(b)#rrggbb 如'#87CEFA'

(c)(r, g, b) 或 (r, g, b, a),其中 r g b a 取均为[0, 1]之间

(d)[0, 1]之间的浮点数的字符串形式,表示灰度值。0表示黑色,1表示白色

(2)linestyle(或ls)关键字用来设置线的样式,可取值为

简写全称描述
'-'solid实线样式
'--'dashed短横线样式
'-.'dashdot点划线样式
':'dotted虚线样式
''或' 'Non

(3)linewidth(或lw)关键字用来设置线的粗细,其值为浮点数。

==> marker相关参数

(4)marker关键字用来设置marker的样式,可取值为:

简写全称描述
'.'point marker点标记
','pixel marker像素标记
'o'circle marker圆标记
'v'triangle_down marker倒三角标记
'^'triangle_up marker正三角标记
'<'triangle_left marker左三角标记
'>'triangle_right marker右三角标记
'1'tri_down marker下箭头标记
'2'tri_up marker上箭头标记
'3'tri_left marker左箭头标记
'4'tri_right marker右箭头标记
's'square marker正方形标记
'p'pentagon marker五边形标记
'*'star marker星形标记
'h'hexagon1 marker六边形标记 1
'H'hexagon2 marker六边形标记 2
'+'plus marker加号标记
'x'x markerX 标记
'D'diamond marker菱形标记
'd'thin_diamond marker窄菱形标记
'|'vline marker竖直线标记
'_'hline marker水平线标记

(5)markeredgecolor 或 mec

(6)markeredgewidth 或 mew

(7)markerfacecolor 或 mfc

(8)markerfacecoloralt 或 mfcalt

(9)markersize 或 ms

另外,marker关键字参数可以和color以及linestyle这两个关键字参数合并为一个字符串。

plt.plot(x, y, c='r', ls='--', lw=3)
plt.plot(x, y, c='#526922', ls='-.')
plt.plot(x, y, c=(0.8, 0, 0), linewidth=2)
plt.plot(x, y, color='lightblue', linestyle='dashed')
plt.plot(x, y, marker='o', mec='r', mfc='w')
plt.plot(x, y, marker='*', ms=10)
plt.plot(x, y, 'ro-')
plt.plot(x, y, 'g*:', ms=10)

2、legend方法参数详解:

(1)loc关键字用来设置图例的位置,可取值为数字或字符串: 

数字字符串
0

'best'

1

'upper right'

2

'upper left'

3

'lower left'

4

'lower right'

5

'right'

6

'center left'

7

'center right'

8

'lower center'

9

'upper center'

10

'center'

plt.legend()
plt.legend(loc='upper right')

四、Q&A

报错信息:no display name and no $DISPLAY environment variable

原因:用ssh远程登录linux系统,在terminate中运行python脚本(利用matplotlib生成jpg图片),结果报以上错误

解决:添加matplotlib.use('Agg')这句话,matplotlib设置Agg要放在任何导入的其它相关包前面

举例:

import matplotlib                                                                                                         
matplotlib.use('Agg')
import numpy as np
import matplotlib.pyplot as plt

参考:python - Generating a PNG with matplotlib when DISPLAY is undefined - Stack Overflow

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值