本文共 2206 字,大约阅读时间需要 7 分钟。
python里的matplotlib是一个很强大的绘图软件包。可以绘制类似matlab和R软件效果的图样。这几天尝试着从原始数据得到一个。就用了这个软件包。效果还好。虽然软件很庞大很复杂,但是遇到的各种问题都还能比较好地解决。最后得到了我想要的结果。
代码如下:
01 | #!/usr/bin/python |
02 | import numpy as NP |
03 | A = NP.array([ |
04 | [ 6.55 , 6.76 , 7.32 , 5.6 , 5.94 ,], |
05 | [ 0.01 , 0.01 , 0.04 , 0.02 , 0.11 ,], |
06 | [ 6.45 , 6.29 , 4.34 , 4.57 , 7.15 ,], |
07 | [ 8.73 , 10.67 , 6.9 , 8.25 , 8.53 ,], |
08 | [ 0.03 , 0.01 , 0.05 , 0.01 , 0.07 ,], |
09 | [ 1.36 , 1.41 , 0.8 , 0.98 , 1.36 ,], |
10 | [ 0 , 0 , 0 , 0 , 0.01 ,], |
11 | [ 2.09 , 2.93 , 1.94 , 1.96 , 3.56 ,], |
12 | [ 3.61 , 3.37 , 2.62 , 6.99 , 4.6 ,], |
13 | [ 6.08 , 7.04 , 4.72 , 4.78 , 7.2 ,], |
14 | [ 1.67 , 0.92 , 0.62 , 3.87 , 0.75 ,], |
15 | [ 0.01 , 0 , 0 , 0.11 , 0.18 ,], |
16 | [ 0.03 , 0 , 0.13 , 0.03 , 0.24 ,], |
17 | [ 1.66 , 1.8 , 1.81 , 1.81 , 2.12 ,], |
18 | [ 3.37 , 3.48 , 4.39 , 3.02 , 3.2 ,], |
19 | [ 4.77 , 4.91 , 8.62 , 5.35 , 4.68 ,], |
20 | [ 7.58 , 7.9 , 3.02 , 7.57 , 8.15 ,], |
21 | [ 7.59 , 7.79 , 9.92 , 8.17 , 7.61 ,], |
22 | [ 3.59 , 3.46 , 2.54 , 2.99 , 2.68 ,], |
23 | [ 2.51 , 3.82 , 4.57 , 2.56 , 3.19 ,], |
24 | [ 1.74 , 2.38 , 5.4 , 2.05 , 2.24 ,], |
25 | [ 4.71 , 3.05 , 5.12 , 2.73 , 4.18 ,], |
26 | [ 0.85 , 0.93 , 2.47 , 0.83 , 1.12 ,], |
27 | [ 11.62 , 12.01 , 10.43 , 12.49 , 12.42 ,], |
28 | [ 13.4 , 9.06 , 12.24 , 13.26 , 8.71 ,], |
29 | ]) |
30 |
31 | from matplotlib import pyplot as PLT |
32 | from matplotlib import cm as CM |
33 | from matplotlib import axes |
34 | # 设定一个图像,背景为白色。 |
35 | fig = PLT.figure(facecolor = 'w' ) |
36 | #注意位置坐标,数字表示的是坐标的比例 |
37 | ax1 = fig.add_subplot( 2 , 1 , 1 ,position = [ 0.1 , 0.15 , 0.9 , 0.8 ]) |
38 | #注意标记旋转的角度 |
39 | ax1.set_xticklabels([' ',' A ',' B ',' C ',' D ',' E'], range ( 6 ), rotation = - 45 ) |
40 |
41 | # select the color map |
42 | #可以有多种选择,这里我最终选择的是spectral,那个1000是热度标尺被分隔成多少块,数字越多,颜色区分越细致。 |
43 | #cmap = CM.get_cmap('RdYlBu_r', 1000) |
44 | #cmap = CM.get_cmap('rainbow', 1000) |
45 | cmap = CM.get_cmap( 'spectral' , 1000 ) |
46 |
47 | # map the colors/shades to your data |
48 | #那个vmin和vmax是数据矩阵中的最大和最小值。这个范围要与数据的范围相协调。 |
49 | #那个aspect参数,对确定图形在整个图中的位置和大小有关系。上面的add_subplot中的position参数的数值要想有作用,这里的这个参数一定要选auto。 |
50 | map = ax1.imshow(A, interpolation = "nearest" , cmap = cmap,aspect = 'auto' , vmin = 0 ,vmax = 15 ) |
51 | #shrink是标尺缩小的比例 |
52 | cb = PLT.colorbar(mappable = map , cax = None , ax = None ,shrink = 0.5 ) |
53 | cb.set_label( '(%)' ) |
54 |
55 | # plot it |
56 | PLT.show() |
剩下一些比较简单的图形调整问题,就用gimp来搞定了。这些尚不能解决的问题包括:
1)纵坐标是每隔5行才出现一个数字。我想调成每行都显示,但是yticklabel里找了半天不知道怎么弄。
2)纵坐标在左边,不知道如何改到右边去。
3)不知道如何修改热度区间的位置,比如想把他挪到整个图形的最右上角去。
4)坐标的标签是一个数组,但是很奇怪第一个一定要是空的来占一个位置。不知道是为什么。
5)的label(那个带括号的百分号符)不知道怎样改变方向。
原文来自:http://ribozyme.i.sohu.com/blog/view/182128700.htm,