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

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

具体参数参看官方文档:http://matplotlib.org/users/customizing.html

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

为什么python画图显示不出负号 为什么用python画图_为什么python画图显示不出负号

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

效果如下:

为什么python画图显示不出负号 为什么用python画图_数据_02

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

效果如下:

为什么python画图显示不出负号 为什么用python画图_第三方库_03

这里的参数意义:

x为横坐标向量,y为纵坐标向量,x,y的长度必须一致。

控制颜色:color为散点的颜色标志,常用color的表示如下:

b---blue c---cyan g---green k----black

m---magenta r---red w---white y----yellow

有四种表示颜色的方式:

用全名

16进制,如:#FF00FF

灰度强度,如:"0.7’

控制标记风格: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()

效果如下:

为什么python画图显示不出负号 为什么用python画图_第三方库_04

这里有一个新的参数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()效果如下:

为什么python画图显示不出负号 为什么用python画图_数据_05

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

效果如下:

为什么python画图显示不出负号 为什么用python画图_为什么python画图显示不出负号_06

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

效果如下:

为什么python画图显示不出负号 为什么用python画图_为什么python画图显示不出负号_07

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

import matplotlib.pyplot as plt

import numpy as np

import matplotlib.image as mpimg

# 2D data

delta = 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 image

img=mpimg.imread('marvin.jpg')

plt.subplot(122)

plt.imshow(img)

plt.title("imshow")

plt.show()

#plt.savefig("matplot_sample.jpg")

效果图:

为什么python画图显示不出负号 为什么用python画图_第三方库_08

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 figure

plt.show()

效果图:

为什么python画图显示不出负号 为什么用python画图_数据_09

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

import networkx as nx

import pylab as plt

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

结果如下:

为什么python画图显示不出负号 为什么用python画图_为什么python画图显示不出负号_10