Matplotlib模块 |图表绘制工具

1.Matplotlib简介及图表窗口

Matplotlib → 一个python版的matlab绘图接口,以2D为主,支持python、numpy、pandas基本数据结构,运营高效且有较丰富的图表库

https://matplotlib.org/api/pyplot_api.html

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 图表窗口1 → plt.show()

plt.plot(np.random.rand(10))
plt.show()
# 直接生成图表

# 图表窗口2 → 魔法函数,嵌入图表

% matplotlib inline
x = np.random.randn(1000)
y = np.random.randn(1000)
plt.scatter(x,y)
# 直接嵌入图表,不用plt.show()
# <matplotlib.collections.PathCollection at ...> 代表该图表对象

# 图表窗口3 → 魔法函数,弹出可交互的matplotlib窗口
% matplotlib notebook
s = pd.Series(np.random.randn(100))
s.plot(style=‘k--o‘, figsize=(10, 5))
# 可交互的matplotlib窗口,不用plt.show()
# 可做一定调整

# 图表窗口4 → 魔法函数,弹出matplotlib控制台
% matplotlib qt5
df = pd.DataFrame(np.random.rand(50, 2),columns=[‘A‘, ‘B‘])
df.hist(figsize=(12, 5), color=‘g‘, alpha=0.8)

# 可交互性控制台
# 如果已经设置了显示方式(比如notebook),需要重启然后再运行魔法函数
# 网页嵌入的交互性窗口 和 控制台,只能显示一个

#plt.close()
# 关闭窗口

#plt.gcf().clear()
# 每次清空图表内内容

2.图表的基本元素

图表内基本参数设置

# 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签等
df = pd.DataFrame(np.random.rand(10, 2), columns=[‘A‘, ‘B‘])
fig = df.plot(figsize=(6, 4)) # figsize:创建图表窗口,设置窗口大小; # 创建图表对象,并赋值与fig

# 图名,图例,轴标签,轴边界,轴刻度,轴刻度标签等
df = pd.DataFrame(np.random.rand(10, 2), columns=[‘A‘, ‘B‘])
fig = df.plot(figsize=(6, 4)) # figsize:创建图表窗口,设置窗口大小; # 创建图表对象,并赋值与fig

plt.title(‘Interesting Graph - Check it out‘) #图名
plt.xlabel(‘Plot Number‘) #x轴标签
plt.ylabel(‘Important var‘) #y轴标签
plt.legend(loc=‘upper right‘) #就是图例的位置 右上
# 显示图例,loc表示位置
# ‘best‘         : 0, (only implemented for axes legends)(自适应方式)
# ‘upper right‘  : 1,
# ‘upper left‘   : 2,
# ‘lower left‘   : 3,
# ‘lower right‘  : 4,
# ‘right‘        : 5,
# ‘center left‘  : 6,
# ‘center right‘ : 7,
# ‘lower center‘ : 8,
# ‘upper center‘ : 9,
# ‘center‘       : 10,
plt.xlim([0, 12]) # x轴边界
plt.ylim([0, 1.5]) # y轴边界
plt.xticks(range(10)) # 设置x刻度
plt.yticks([0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2]) # 设置y刻度
fig.set_xticklabels("%.1f" %i for i in range(10)) # x轴刻度标签 ,使得其显示1位小数
fig.set_yticklabels("%.2f" %i for i in [0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2]) # y轴刻度标签,使得y轴显示后边再加一位小数,之设置前有一位
# 范围只限定图表的长度,刻度则是决定显示的标尺 → 这里x轴范围是0-12,但刻度只是0-9,刻度标签使得其显示1位小数
# 轴标签则是显示刻度的标签
print(fig, type(fig))

# % matplotlib inline
# import matplotlib.pyplot as plt
x = np.linspace(-np.pi,np.pi,256,endpoint = True)
c, s = np.cos(x), np.sin(x)
plt.plot(x, c)
plt.plot(x, s)
# plt.grid(True, linestyle="--", color="gray", linewidth="0.5", axis=‘x‘)
# 通过ndarry创建图表

## 显示网格
# linestyle:线型
# color:颜色
# linewidth:宽度
# axis:x,y,both,显示x/y/两者的格网
plt.tick_params(bottom=‘on‘,top=‘off‘,left=‘on‘,right=‘off‘) #就是四个轴有刻度显示出来,关掉网格线就看出来了
# 刻度显示
import matplotlib  # 这里需要导入matploltib,而不仅仅导入matplotlib.pyplot
matplotlib.rcParams[‘xtick.direction‘] = ‘out‘ # 设置刻度的方向,in,out,inout
matplotlib.rcParams[‘ytick.direction‘] = ‘inout‘
frame = plt.gca()
frame.axes.get_xaxis().set_visible(False)  # x/y 轴不可见
frame.axes.get_yaxis().set_visible(False)
# plt.axis(‘off‘) # 关闭坐标轴

3.图表的样式参数

linestyle、style、color、marker

linestyle参数

plt.plot([i**2 for i in range(100)],
        linestyle = ‘-.‘)
# ‘-‘       solid line style
# ‘--‘      dashed line style
# ‘-.‘      dash-dot line style
# ‘:‘       dotted line style

marker参数

s = pd.Series(np.random.randn(100).cumsum())
s.plot(linestyle = ‘--‘,
      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
# ‘H‘       hexagon2 marker
# ‘+‘       plus marker
# ‘x‘       x marker
# ‘D‘       diamond marker
# ‘d‘       thin_diamond marker
# ‘|‘       vline marker
# ‘_‘       hline marker

color参数

plt.hist(np.random.randn(100),
        color = ‘g‘,alpha = 0.8)# alpha:0-1,透明度

df = pd.DataFrame(np.random.randn(1000, 4), columns=list(‘ABCD‘))
df = df.cumsum()
df.plot(style = ‘--.‘, alpha = 0.8, colormap = ‘GnBu‘)
# colormap:颜色板,包括:
# Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2, Dark2_r, GnBu, GnBu_r, Greens, Greens_r,
# Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn, PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r,
# PuBu, PuBuGn, PuBuGn_r, PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r, RdYlBu, RdYlBu_r,
# RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral, Spectral_r, Wistia, Wistia_r, YlGn, YlGnBu, YlGnBu_r,
# YlGn_r, YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn, autumn_r, binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r,
# cool, cool_r, coolwarm, coolwarm_r, copper, copper_r, cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r,
# gist_heat, gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg, gist_yarg_r, gnuplot,
# gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, inferno, inferno_r, jet, jet_r, magma, magma_r, nipy_spectral,
# nipy_spectral_r, ocean, ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, seismic, seismic_r, spectral,
# spectral_r ,spring, spring_r, summer, summer_r, terrain, terrain_r, viridis, viridis_r, winter, winter_r

# 其他参数见“颜色参数.docx”

style参数,可以包含linestyle,marker,color

ts = pd.Series(np.random.randn(1000).cumsum(), index=pd.date_range(‘1/1/2000‘, periods=1000))
ts.plot(style = ‘--g.‘,grid=True)
# style → 风格字符串,这里包括了linestyle(-),marker(.),color(g)
# plot()内也有grid参数

整体风格样式

import matplotlib.style as psl
print(plt.style.available) # 查看样式列表
psl.use(‘ggplot‘)
ts = pd.Series(np.random.randn(1000).cumsum(), index=pd.date_range(‘1/1/2000‘, periods=1000))
ts.plot(style = ‘--g.‘,grid = True,figsize=(10,6))  #一旦选用样式后,所有图表都会有样式,重启后才能关掉

--->

[‘seaborn-bright‘, ‘seaborn-notebook‘, ‘seaborn-darkgrid‘, ‘seaborn-ticks‘, ‘seaborn-poster‘, ‘seaborn-dark‘, ‘grayscale‘, ‘fivethirtyeight‘, ‘seaborn-paper‘, ‘seaborn-whitegrid‘, ‘seaborn-deep‘, ‘ggplot‘, ‘classic‘, ‘bmh‘, ‘dark_background‘, ‘seaborn-colorblind‘, ‘seaborn-white‘, ‘seaborn-muted‘, ‘seaborn-dark-palette‘, ‘seaborn-talk‘, ‘seaborn-pastel‘]

4.刻度、注解、图表输出

主刻度、次刻度

刻度

from matplotlib.ticker import MultipleLocator, FormatStrFormatter

t = np.arange(0.0, 100.0, 1)
s = np.sin(0.1*np.pi*t)*np.exp(-t*0.01)
ax = plt.subplot(111) #注意:一般都在ax中设置,不再plot中设置
plt.plot(t,s,‘--*‘)
plt.grid(True, linestyle = "--",color = "gray", linewidth = "0.5",axis = ‘both‘)
# 网格
#plt.legend()  # 图例

xmajorLocator = MultipleLocator(20) # 将x主刻度标签设置为10的倍数
xmajorFormatter = FormatStrFormatter(‘%.0f‘) # 设置x轴标签文本的格式
xminorLocator   = MultipleLocator(5) # 将x轴次刻度标签设置为5的倍数
ymajorLocator = MultipleLocator(0.5) # 将y轴主刻度标签设置为0.5的倍数
ymajorFormatter = FormatStrFormatter(‘%.1f‘) # 设置y轴标签文本的格式
yminorLocator   = MultipleLocator(0.1) # 将此y轴次刻度标签设置为0.1的倍数  

ax.xaxis.set_major_locator(xmajorLocator)  # 设置x轴主刻度
ax.xaxis.set_major_formatter(xmajorFormatter)  # 设置x轴标签文本格式
ax.xaxis.set_minor_locator(xminorLocator)  # 设置x轴次刻度

ax.yaxis.set_major_locator(ymajorLocator)  # 设置y轴主刻度
ax.yaxis.set_major_formatter(ymajorFormatter)  # 设置y轴标签文本格式
ax.yaxis.set_minor_locator(yminorLocator)  # 设置y轴次刻度
#
ax.xaxis.grid(True, which=‘majpr‘) #x坐标轴的网格使用(就是纵横交错的网格线)主刻度 both、minor(只显示次刻度)、majpr(只显示主刻度)
ax.yaxis.grid(True, which=‘minor‘) #y坐标轴的网格使用次刻度

# which:格网显示

#删除坐标轴的刻度显示
#ax.yaxis.set_major_locator(plt.NullLocator())
# ax.xaxis.set_major_formatter(plt.NullFormatter()) 

注解

df = pd.DataFrame(np.random.randn(10,2))
df.plot(style = ‘--o‘)
plt.text(5,0.5,‘hello‘,fontsize=10)
# 注解 → 横坐标,纵坐标,注解字符串

图表输出

df = pd.DataFrame(np.random.randn(1000, 4), columns=list(‘ABCD‘))
df = df.cumsum()
df.plot(style = ‘--.‘,alpha = 0.5)
plt.legend(loc = ‘upper right‘)
plt.savefig(‘C:/Users/Administrator/Desktop/pic.png‘,
            dpi=400,
            bbox_inches = ‘tight‘,
            facecolor = ‘g‘,
            edgecolor = ‘b‘)
# 可支持png,pdf,svg,ps,eps…等,以后缀名来指定
# dpi是分辨率
# bbox_inches:图表需要保存的部分。如果设置为‘tight’,则尝试剪除图表周围的空白部分。
# facecolor,edgecolor: 图像的背景色,默认为‘w’(白色)

5.子图

在matplotlib中,整个图像为一个Figure对象
在Figure对象中可以包含一个或者多个Axes对象
每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域

plt.figure, plt.subplot

# plt.figure() 绘图对象
# plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None,
# frameon=True, FigureClass=<class ‘matplotlib.figure.Figure‘>, **kwargs)
fig1 = plt.figure(num=1,figsize=(4,2))
plt.plot(np.random.rand(50).cumsum(),‘k--‘)
fig2 = plt.figure(num=2,figsize=(4,2))
plt.plot(50-np.random.rand(50).cumsum(),‘k--‘)
# num:图表序号,可以试试不写或都为同一个数字的情况,图表如何显示
# figsize:图表大小

# 当我们调用plot时,如果设置plt.figure(),则会自动调用figure()生成一个figure, 严格的讲,是生成subplots(111)

# 子图创建1 - 先建立子图然后填充图表

fig = plt.figure(figsize=(10,6),facecolor = ‘gray‘)

ax1 = fig.add_subplot(2,2,1)  # 第一行的左图
plt.plot(np.random.rand(50).cumsum(),‘k--‘)
plt.plot(np.random.randn(50).cumsum(),‘b--‘)
# 先创建图表figure,然后生成子图,(2,2,1)代表创建2*2的矩阵表格,然后选择第一个,顺序是从左到右从上到下
# 创建子图后绘制图表,会绘制到最后一个子图

ax2 = fig.add_subplot(2,2,2)  # 第一行的右图
ax2.hist(np.random.rand(50),alpha=0.5)

ax4 = fig.add_subplot(2,2,4)  # 第二行的右图
df2 = pd.DataFrame(np.random.rand(10, 4), columns=[‘a‘, ‘b‘, ‘c‘, ‘d‘])
ax4.plot(df2,alpha=0.5,linestyle=‘--‘,marker=‘.‘)
# 也可以直接在子图后用图表创建函数直接生成图表

---->

[<matplotlib.lines.Line2D at 0x13bbb240>,
 <matplotlib.lines.Line2D at 0x13bbb390>,
 <matplotlib.lines.Line2D at 0x13bbb5f8>,
 <matplotlib.lines.Line2D at 0x13bbb780>]

# 子图创建2 - 创建一个新的figure,并返回一个subplot对象的numpy数组 → plt.subplot

fig,axes = plt.subplots(2,3,figsize=(10,4))
ts = pd.Series(np.random.randn(1000).cumsum())
print(axes, axes.shape, type(axes))
# 生成图表对象的数组

ax1 = axes[0,1]
ax1.plot(ts)
---------------->
[[<matplotlib.axes._subplots.AxesSubplot object at 0x000000000BB5A4A8>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C08B240>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C0D6550>]
 [<matplotlib.axes._subplots.AxesSubplot object at 0x000000000C10CDD8>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C15B160>
  <matplotlib.axes._subplots.AxesSubplot object at 0x000000000C190DA0>]] (2, 3) <class ‘numpy.ndarray‘>

plt.subplots,参数调整

fig, axes = plt.subplots(2, 2, sharex=True, sharey=True)# sharex,sharey:是否共享x,y刻度
for i in range(2):
    for j in range(2):
        axes[i, j].hist(np.random.randn(500), color=‘k‘, alpha=0.5)
plt.subplots_adjust(wspace=0,hspace=0)
# wspace,hspace:用于控制宽度和高度的百分比,比如subplot之间的间距

# 子图创建3 - 多系列图,分别绘制
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns = list(‘ABCD‘))
df = df.cumsum()
df.plot(style = ‘--.‘, alpha=0.4, grid=True, figsize = (8, 8),
       subplots = True,
       layout = (2,3),
       sharex = False)
plt.subplots_adjust(wspace=0,hspace=0.2)
# plt.plot()基本图表绘制函数 → subplots,是否分别绘制系列(子图)
# layout:绘制子图矩阵,按顺序填充

原文地址:https://www.cnblogs.com/shengyang17/p/9460868.html

时间: 2024-11-12 17:59:07

Matplotlib模块 |图表绘制工具的相关文章

图表绘制工具--Matplotlib 2

''' [课程3.6] 基本图表绘制 plt.plot() 图表类别:线形图.柱状图.密度图,以横纵坐标两个维度为主 同时可延展出多种其他图表样式 plt.plot(kind='line', ax=None, figsize=None, use_index=True, title=None, grid=None, legend=False, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xl

图表绘制工具--Matplotlib

''' [课程3.1] Matplotlib简介及图表窗口 Matplotlib → 一个python版的matlab绘图接口,以2D为主,支持python.numpy.pandas基本数据结构,运营高效且有较丰富的图表库 ''' import numpy as np import pandas as pd import matplotlib.pyplot as plt # 图表窗口1 → plt.show() plt.plot(np.random.rand(10)) plt.show() #

Chart.js | HTML5 图表绘制工具库(知识整理、中文注释、中文文档)

Chart.js:用不同的方式让你的数据变得可视化.每种类型的图表都有动画效果,并且看上去非常棒,即便是在retina屏幕上.基于HTML5 canvas技术,Chart.js不依赖任何外部工具库,轻量级(压缩之后仅有4.5k).值得推荐学习! GitHub源码: https://github.com/nnnick/Chart.js Chart.js文档:http://www.bootcss.com/p/chart.js/ 步骤: html部分: <canvas id="myChart&q

Python图表绘制:matplotlib绘图库入门

matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. 它的文档相当完备,并且Gallery页面中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. 在Linux下比较著名的数据图工具还有gnuplot,这个是免费的,Python有一个包可以调用gnuplot,但是语法比较不习惯,而且画图质量不高.

python matplotlib模块——绘制三维图形、三维数据散点图(转)

转自https://blog.csdn.net/eddy_zheng/article/details/48713449 python matplotlib模块,是扩展的MATLAB的一个绘图工具库.他可以绘制各种图形,可是最近最的一个小程序,得到一些三维的数据点图,就学习了下python中的matplotlib模块,如何绘制三维图形. 初学者,可能对这些第三方库安装有一定的小问题,对于一些安装第三方库经验较少的朋友,建议使用 Anaconda ,集成了很多第三库,基本满足大家的需求,下载地址,对

python学习笔记(图表生成matplotlib模块下载安装)

最近博主在找工作换新环境.昨天电话面试中问到python中threading模块进行接口性能测试的时候.如何生成性能测试报告 我现在还停留在打印在屏幕中.所以今天想着是否可以生成相应的性能测试报告 首先想到的是python是否支持生成图表.有很多模块可以支持 博主这里就先试一试matplotlib模块 具体这个模块的来源.我就不细说明了.直接就是下载安装 这里给出pypi的下载地址: https://pypi.python.org/pypi/matplotlib/ 根据需要的版本下载对应的安装包

matplotlib之scatter绘制散点

1 # 使用matplotlib.pyplot.scatter绘制散点 2 import matplotlib.pyplot as plt 3 from pylab import mpl 4 5 # 设置默认字体,解决中文显示乱码问题 6 mpl.rcParams['font.sans-serif'] = ['SimHei'] 7 8 # 画单个点 9 plt.scatter(0, 0, s=200) # 指定点的大小 10 11 # 画多个点 12 x_values = [1, 2, 3, 4

利用python实现网卡流量图表绘制!!!

项目背景: 利用python实现一个自动化的网卡流量图表绘制,这对于我们实现自动化运维平台有更深入的理解, 也会让我们对于现有的一些监控软件的一些实现都有很大的帮助. 实现环境: 虚拟机VMware Workstation 12 player 服务器:centos6.5的系统  ip:192.168.0.25 python2.6.6 rrdtool模块.time模块.psutil模块. SecureCRT ssh远程连接软件 实验过程: 思路其实很清醒:创建rrd数据库---->数据写入rrd数

第三十九篇 matplotlib模块

matplotlib模块 绘图库,可以创建常用的统计图(条形图.箱型图.折线图.散点图和直方图) bar() 条形图 # 由于该模块不识别中文,所以我们需要导入一个中文简体字文件 import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties font = FontProperties(fname='B:\\msyh.ttc') # 在文件B中找字体文件 # 修改背景为条纹 plt.style.