前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python matplotlib函数备忘

python matplotlib函数备忘

作者头像
羽翰尘
修改2019-11-26 17:07:28
1K0
修改2019-11-26 17:07:28
举报
文章被收录于专栏:技术向技术向

本文由腾讯云+社区自动同步,原文地址 https://cloud.tencent.com/developer/article/1540859

1 简介

matplotlib是python中一个非常好用的画图库,倾向于使用数据画图,设计思路与matlab中的plot相同。

1.1 画图与保存

1.1.1 无显示器画图

ssh远程操作 出现RuntimeError: Invalid DISPLAY variable

添加如下代码

代码语言:txt
复制
plt.switch_backend('agg')

参考页面

1.1.2 保存图像

使用plt.savefig

代码语言:txt
复制
import matplotlib.pyplot as plt
plt.savefig("filename.png")
plt.show()

注意savefig必须在show之前调用,否则show之后默认开新图,保存的图一片空白

或者,使用gcf方法

代码语言:txt
复制
fig = plt.gcf()
plt.show()
fig1.savefig('test.jpg', dpi=100)

1.1.3 图像格式

在plt.savefig()方法中增加format=参数

可选的参数如下:

  • jpg
  • png
  • pdf
  • eps
  • svg

完整的调用方法为

plt.savefig('file_name', format='jpg')

如果不指定format,默认为jpg格式,与文件的后缀名无关

1.1.4 设置图像dpi

代码语言:txt
复制
plt.savefig(..., dpi=150)

1.1.5 直接获取bin图像流

在服务器环境,或者特定环境下,我们不建议用文件来交换画图结果,更希望函数直接返回一个二进制的图像文件。

代码语言:txt
复制
import matplotlib.pyplot as plt
import io
from PIL import Image 
# ... plot something
canvas = plt.get_current_fig_manager().canvas
canvas.draw()
buf, size = canvas.print_to_buffer()
image = Image.frombuffer('RGBA', size, buf, 'raw', 'RGBA', 0, 1)
buffer = io.BytesIO()
image.save(buffer,'PNG')
data = buffer.getvalue()

1.2 画图增强

1.2.1 画多个子图

共享x y轴的意思是,多张图是否使用同一个单位刻度,共享后只会在最左边的y轴和最下边的

x轴标出数字,其他轴只有单位刻度。

代码语言:txt
复制
import numpy as np 
import matplotlib.pyplot as plt 
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
# 不共享y轴
f, (ax1, ax2) = plt.subplots(1, 2, sharey=False)
ax1.plot(x, y)
ax1.set_title('Not sharing Y axis')
ax2.scatter(x, y)
# 共享y轴
f, (ax1, ax2) = plt.subplots(1, 2, sharey=True)
ax1.plot(x, y)
ax1.set_title('Sharing Y axis')
ax2.scatter(x, y)
plt.show()

Creates four polar axes, and accesses them through the returned array

代码语言:txt
复制
>>> fig, axes = plt.subplots(2, 2, subplot_kw=dict(polar=True))
>>> axes[0, 0].plot(x, y)
>>> axes[1, 1].scatter(x, y)

1.2.2 增加子图的title

代码语言:txt
复制
ax.set_title('Simple plot')

参考

1.2.3 画grid

代码语言:txt
复制
plt.grid(True, color='grey', linestyle='-', linewidth=1)

1.2.4 关闭坐标刻度

代码语言:txt
复制
plt.xticks([])
plt.yticks([])

1.2.5 关闭坐标轴

整个坐标系统都不见了,只剩下曲线

代码语言:txt
复制
plt.axis('off')

1.2.6 坐标轴不可见

代码语言:txt
复制
frame = plt.gca()
frame.axes.get_yaxis().set_visible(False)
frame.axes.get_xaxis().set_visible(False)

1.2.7 画图例

代码语言:txt
复制
plt.figure()
plt.plot(data['loss100'])
plt.plot(data['loss300'])
plt.plot(data['loss600'])
plt.title("Compare loss(different lr)") 
plt.xlabel("step")
plt.ylabel("loss")
plt.legend(['lr=0.01', 'lr=0.3', 'lr=0.6'])

画图例参考 (这个是官方教程,但是无法画出图例,姑且列上等以后研究)

2. 其他常用常数

2.1 格式化输出

  1. 使用百分号
代码语言:txt
复制
print('hello %s%.4f' %('str', 5.0)) 
  1. 使用format
代码语言:txt
复制
print('hello {:.4f}/{:.5f} {}'.format(5,6,'str')) 

2.2 zip函数

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

代码语言:txt
复制
>>>a = [1,2,3]
>>> b = [4,5,6]
>>> c = [4,5,6,7,8]
>>> zipped = zip(a,b)     # 打包为元组的列表
[(1, 4), (2, 5), (3, 6)]
>>> zip(a,c)              # 元素个数与最短的列表一致
[(1, 4), (2, 5), (3, 6)]
>>> zip(*zipped)          # 与 zip 相反,可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 简介
    • 1.1 画图与保存
      • 1.1.1 无显示器画图
      • 1.1.2 保存图像
      • 1.1.3 图像格式
      • 1.1.4 设置图像dpi
      • 1.1.5 直接获取bin图像流
    • 1.2 画图增强
      • 1.2.1 画多个子图
      • 1.2.2 增加子图的title
      • 1.2.3 画grid
      • 1.2.4 关闭坐标刻度
      • 1.2.5 关闭坐标轴
      • 1.2.6 坐标轴不可见
      • 1.2.7 画图例
  • 2. 其他常用常数
    • 2.1 格式化输出
      • 2.2 zip函数
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档