Python基础-画图:matplotlib

news/2024/11/17 19:04:42/

Python画图主要用到matplotlib这个库。具体来说是pylab和pyplot这两个子库。这两个库可以满足基本的画图需求。

pylab神器:pylab.rcParams.update(params)。这个函数几乎可以调节图的一切属性,包括但不限于:坐标范围,axes标签字号大小,xtick,ytick标签字号,图线宽,legend字号等。

scatter和 plot 函数的不同之处

scatter才是离散点的绘制程序,plot准确来说是绘制线图的,当然也可以画离散点。

scatter/scatter3做散点的能力更强,因为他可以对散点进行单独设置
所以消耗也比plot/plot3大
所以如果每个散点都是一致的时候,还是用plot/plot3好以下
如果要做一些plot没法完成的事情那就只能用scatter了

scatter强大,但是较慢。所以如果你只是做实例中的图,plot足够了。


 plt.ion()用于连续显示。

# plot the real data
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.scatter(x_data, y_data)
plt.ion()#本次运行请注释,全局运行不要注释
plt.show()

首先在python中使用任何第三方库时,都必须先将其引入。即:

import matplotlib.pyplot as plt
  • 1

或者:

from matplotlib.pyplot import *

1.建立空白图

fig = plt.figure()

也可以指定所建立图的大小

fig = plt.figure(figsize=(4,2))

也可以建立一个包含多个子图的图,使用语句:

plt.figure(figsize=(12,6))
plt.subplot(231)
plt.subplot(232)
plt.subplot(233)
plt.subplot(234)
plt.subplot(235)
plt.subplot(236)
plt.show()

其中subplot()函数中的三个数字,第一个表示Y轴方向的子图个数,第二个表示X轴方向的子图个数,第三个则表示当前要画图的焦点。

当然上述写法并不是唯一的,比如我们也可以这样写:

fig = plt.figure(figsize=(6, 6))
ax1 = fig.add_subplot(221)
ax2 = fig.add_subplot(222)
ax3 = fig.add_subplot(223)
ax4 = fig.add_subplot(224)
plt.show()

plt.subplot(111)和plt.subplot(1,1,1)是等价的。意思是将区域分成1行1列,当前画的是第一个图(排序由行至列)。

plt.subplot(211)意思就是将区域分成2行1列,当前画的是第一个图(第一行,第一列)。以此类推,只要不超过10,逗号就可省去。

可以看到图中的x,y轴坐标都是从0到1,当然有时候我们需要其他的坐标起始值。 
此时可以使用语句指定:

ax1.axis([-1, 1, -1, 1])

或者:

plt.axis([-1, 1, -1, 1])

效果如下:

 

2.向空白图中添加内容,想你所想,画你所想

首先给出一组数据:

x = [1, 2, 3, 4, 5]
y = [2.3, 3.4, 1.2, 6.6, 7.0]

A.画散点图*

plt.scatter(x, y, color='r', marker='+')
plt.show()

效果如下:

这里的参数意义:

  1. x为横坐标向量,y为纵坐标向量,x,y的长度必须一致。
  2. 控制颜色:color为散点的颜色标志,常用color的表示如下:

    b---blue   c---cyan  g---green    k----black
    m---magenta r---red  w---white    y----yellow

    有四种表示颜色的方式:

    • 用全名
    • 16进制,如:#FF00FF
    • 灰度强度,如:‘0.7’
  3. 控制标记风格:marker为散点的标记,标记风格有多种:

    .  Point marker
    ,  Pixel marker
    o  Circle marker
    v  Triangle down marker 
    ^  Triangle up marker 
    <  Triangle left marker 
    >  Triangle right marker 
    1  Tripod down marker
    2  Tripod up marker
    3  Tripod left marker
    4  Tripod right marker
    s  Square marker
    p  Pentagon marker
    *  Star marker
    h  Hexagon marker
    H  Rotated hexagon D Diamond marker
    d  Thin diamond marker
    | Vertical line (vlinesymbol) marker
    _  Horizontal line (hline symbol) marker
    +  Plus marker
    x  Cross (x) marker

B.函数图(折线图)

数据还是上面的。

fig = plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.plot(x, y, color='r', linestyle='-')
plt.subplot(122)
plt.plot(x, y, color='r', linestyle='--')
plt.show()

效果如下: 

这里有一个新的参数linestyle,控制的是线型的格式:符号和线型之间的对应关系

-      实线
--     短线
-.     短点相间线
:     虚点线

另外除了给出数据画图之外,我们也可以利用函数表达式进行画图,例如:y=sin(x)

from math import *
from numpy import *
x = arange(-math.pi, math.pi, 0.01)
y = [sin(xx) for xx in x]
plt.figure()
plt.plot(x, y, color='r', linestyle='-.')
plt.show()效果如下:

C.扇形图

示例:

import matplotlib.pyplot as plt
y = [2.3, 3.4, 1.2, 6.6, 7.0]
plt.figure()
plt.pie(y)
plt.title('PIE')
plt.show()

效果如下:

D.柱状图bar

示例:

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2.3, 3.4, 1.2, 6.6, 7.0]plt.figure()
plt.bar(x, y)
plt.title("bar")
plt.show()

效果如下:

 

E.二维图形(等高线,本地图片等)

import matplotlib.pyplot as plt
import numpy as np
import matplotlib.image as mpimg
# 2D datadelta = 0.025
x = y = np.arange(-3.0, 3.0, delta)
X, Y = np.meshgrid(x, y)
Z = Y**2 + X**2
plt.figure(figsize=(12, 6))
plt.subplot(121)
plt.contour(X, Y, Z)
plt.colorbar()
plt.title("contour")# read imageimg=mpimg.imread('marvin.jpg')plt.subplot(122)
plt.imshow(img)
plt.title("imshow")
plt.show()
#plt.savefig("matplot_sample.jpg")

效果图:

F.对所画图进行补充

__author__ = 'wenbaoli'import matplotlib.pyplot as plt
from math import *
from numpy import *
x = arange(-math.pi, math.pi, 0.01)
y = [sin(xx) for xx in x]
plt.figure()
plt.plot(x, y, color='r', linestyle='-')
plt.xlabel(u'X')#fill the meaning of X axis
plt.ylabel(u'Sin(X)')#fill the meaning of Y axis
plt.title(u'sin(x)')#add the title of the figureplt.show()

效果图: 

画网络图,要用到networkx这个库,下面给出一个实例:

import networkx as nx

import pylab as plt

= nx.Graph()

g.add_edge(1,2,weight = 4)

g.add_edge(1,3,weight = 7)

g.add_edge(1,4,weight = 8)

g.add_edge(1,5,weight = 3)

g.add_edge(1,9,weight = 3)

g.add_edge(1,6,weight = 6)

g.add_edge(6,7,weight = 7)

g.add_edge(6,8,weight = 7

g.add_edge(6,9,weight = 6)

g.add_edge(9,10,weight = 7)

g.add_edge(9,11,weight = 6)

fixed_pos = {1:(1,1),2:(0.7,2.2),3:(0,1.8),4:(1.6,2.3),5:(2,0.8),6:(-0.6,-0.6),7:(-1.3,0.8), 8:(-1.5,-1), 9:(0.5,-1.5), 10:(1.7,-0.8), 11:(1.5,-2.3)} #set fixed layout location

#pos=nx.spring_layout(g) # or you can use other layout set in the module

nx.draw_networkx_nodes(g,pos = fixed_pos,nodelist=[1,2,3,4,5],

node_color = 'g',node_size = 600)

nx.draw_networkx_edges(g,pos = fixed_pos,edgelist=[(1,2),(1,3),(1,4),(1,5),(1,9)],edge_color='g',width = [4.0,4.0,4.0,4.0,4.0],label = [1,2,3,4,5],node_size = 600)

nx.draw_networkx_nodes(g,pos = fixed_pos,nodelist=[6,7,8],

node_color = 'r',node_size = 600)

nx.draw_networkx_edges(g,pos = fixed_pos,edgelist=[(6,7),(6,8),(1,6)],width = [4.0,4.0,4.0],edge_color='r',node_size = 600)

nx.draw_networkx_nodes(g,pos = fixed_pos,nodelist=[9,10,11],

node_color = 'b',node_size = 600)

nx.draw_networkx_edges(g,pos = fixed_pos,edgelist=[(6,9),(9,10),(9,11)],width = [4.0,4.0,4.0],edge_color='b',node_size = 600)

plt.text(fixed_pos[1][0],fixed_pos[1][1]+0.2, s = '1',fontsize = 40)

plt.text(fixed_pos[2][0],fixed_pos[2][1]+0.2, s = '2',fontsize = 40)

plt.text(fixed_pos[3][0],fixed_pos[3][1]+0.2, s = '3',fontsize = 40)

plt.text(fixed_pos[4][0],fixed_pos[4][1]+0.2, s = '4',fontsize = 40)

plt.text(fixed_pos[5][0],fixed_pos[5][1]+0.2, s = '5',fontsize = 40)

plt.text(fixed_pos[6][0],fixed_pos[6][1]+0.2, s = '6',fontsize = 40)

plt.text(fixed_pos[7][0],fixed_pos[7][1]+0.2, s = '7',fontsize = 40)

plt.text(fixed_pos[8][0],fixed_pos[8][1]+0.2, s = '8',fontsize = 40)

plt.text(fixed_pos[9][0],fixed_pos[9][1]+0.2, s = '9',fontsize = 40)

plt.text(fixed_pos[10][0],fixed_pos[10][1]+0.2, s = '10',fontsize = 40)

plt.text(fixed_pos[11][0],fixed_pos[11][1]+0.2, s = '11',fontsize = 40)

plt.show()

结果如下:


http://www.ppmy.cn/news/4227.html

相关文章

JavaScript 非字母数字代码

JavaScript是一种松散类型的语言&#xff0c;它可以&#xff1a; 类似于 truetrue 2 可以不使用数字字面量来获取数字。 符号 可以将对象类型转为字符串类型{} [object Object]可以不用字符字面量来获取字符&#xff0c;例子&#xff1a;[object Object][1] oabc[0] a 以…

采集到的数据要怎么保证准确率

大家好&#xff0c;这里是小安说网控。 完整的电商数据采集到数据库以后&#xff0c;还不能直接拿来应用于渠道管控&#xff0c;必须要对繁多冗杂的数据进行有目的的清洗&#xff0c;才能使数据符合我们的要求。 一、 清洗维度 1、 数据杂质&#xff1a;格式错误、数据异常、数…

gin学习

文章目录零、知识补充GOPROXY地址一、准备工作1、安装gin包&#xff08;mod模式&#xff09;2、文档3、测试 hello gin二、GET POST PUT DELETE请求的使用1、修改端口号2、GET 查3、POST 增4、DELETE 删5、PUT 改6、如何取出参数6.1、GET6.2、POST DELETE PUT6.3、URI三、Bind模…

音视频Media内核学习——OpenMax浅析

一、OpenMax简介&#xff08;缩写为&#xff1a;OMX&#xff09; OpenMAX是一个多媒体应用程序的标准。由NVIDIA公司和Khronos™在2006年推出。 它是无授权费的、跨平台的C语言程序接口序列&#xff0c;这些接口对音频、视频、静态图片的常用操作进行封装。 它包括三层&…

C/C++程序的断点调试 - Dev C++

本文以Dev C 5.11为例&#xff0c;简述C/C程序断点调试的基本方法和过程。其它的IDE环境&#xff0c;大同小异。 本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载&#xff0c;但需要注明原作者"海洋饼干叔 叔"&#xff1b;本文不允许…

DSP篇--C6701功能调试系列之Bootloader程序自引导

目录 1、头文件法 2、一级boot 3、二级boot 4、flash程序3取2测试 调试的前期准备可以参考前面的博文&#xff1a;DSP篇--C6701功能调试系列之前期准备_nanke_yh的博客-CSDN博客 boot程序的大小不能超过1KB&#xff0c;它主要完成以下几个功能&#xff1a;第一是配置DSP的…

华为机试真题 Java 实现【投篮大赛】【2022.11 Q4 新题】

目录 题目 思路 考点 Code 题目 你现在是一场采用特殊赛制投篮大赛的记录员。这场比赛由若干回合组成,过去几回合的得分可能会影响以后几回合的得分。 比赛开始时,记录是空白的。 你会得到一个记录操作的字符串列表 ops,其中ops[i]是你需要记录的第i项操作,ops遵循下述…

第二十八章 linux-设备树二

第二十八章 linux-设备树二 文章目录第二十八章 linux-设备树二设备树是什么为什么需要设备树设备树技术如何工作设备树dts文件在哪里dts的格式简介dts的节点格式imx6ull-14x14-evk.dtsproperty常见预定义标准属性gpio实例驱动中device来源设备树是什么 device tree&#xff0…