沉澱再出發:用python畫各類圖表

沉澱再出發:用python畫各類圖表

1、前言

    最近須要用python來作一些統計和畫圖,所以作一些筆記。python

2、python畫各類圖表

 2.一、使用turtle來畫圖

 1 import turtle as t #turtle庫是python的內部庫,直接import使用便可
 2 import time
 3 
 4 def draw_diamond(turt):
 5     for i in range(1,3):
 6         turt.forward(100) #向前走100步
 7         turt.right(45) #海龜頭向右轉45度
 8         turt.forward(100) #繼續向前走100步
 9         turt.right(135) #海龜頭再向右轉135度
10 
11 
12 def draw_art():
13     window = t.Screen() #建立畫布
14     window.bgcolor("green") #設置畫布顏色
15     brad = t.Turtle() #建立一個Turtle的實例
16     brad.shape('turtle') #形狀是一個海歸turtle,也能夠是圓圈circle,箭頭(默認)等等
17 
18     brad.color("red") #海龜的顏色是紅色red,橙色orange等
19     brad.speed('fast') #海龜畫圖的速度是快速fast,或者slow等
20 
21     for i in range(1,37): #循環36次
22         draw_diamond(brad) #海龜畫一個形狀/花瓣,也就是菱形
23         brad.right(10) #後海龜頭向右旋轉10度
24 
25         brad.right(90) #當圖形畫完一圈後,把海龜頭向右轉90度
26         brad.forward(300) #畫一根長線/海龜往前走300步
27 
28     window.exitonclick() #點擊屏幕退出
29 
30 draw_art() #調用函數開始畫圖
31 
32 
33 
34 t.color("red", "yellow")
35 t.speed(10)
36 t.begin_fill()
37 for _ in range(50):
38     t.forward(200)
39     t.left(170)
40 end_fill()
41 time.sleep(1)

 2.二、畫座標系

 1 import sys
 2 import math
 3 import random
 4 import matplotlib.pyplot as plt
 5 import pylab as pl
 6 import numpy as np
 7 
 8 pl.mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
 9 pl.mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題
10 
11 x = range(10)  # 橫軸的數據
12 y = [i*i for i in x]  # 縱軸的數據
13 y1 = [i*i+123 for i in x]  # 縱軸的數據
14 pl.title('title zyr') 
15 pl.plot(x, y, '1m:', label=u'compare')  # 加上label參數添加圖例
16 pl.plot(x, y1, '>r--', label=u'set other')  # 加上label參數添加圖例
17 pl.xlabel(u"橫軸的數據")
18 pl.ylabel(u"縱軸的數據")
19 pl.legend()  # 讓圖例生效
20 pl.show()  # 顯示繪製出的圖

import sys
import math
import random
import matplotlib.pyplot as plt
import pylab as pl
import numpy as np

pl.mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
pl.mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題

x = list(range(10))+[100]
y = [i*i for i in x]
pl.plot(x, y, 'ob-', label=u'y=x^2')
pl.xlim(-1, 11)  # 限定橫軸的範圍
pl.ylim(-1, 110)  # 限定縱軸的範圍

pl.show()  # 顯示繪製出的圖

 1 顏色(color 簡寫爲 c):
 2 # 藍色: 'b' (blue)
 3 # 綠色: 'g' (green)
 4 # 紅色: 'r' (red)
 5 # 藍綠色(墨綠色): 'c' (cyan)
 6 # 紅紫色(洋紅): 'm' (magenta)
 7 # 黃色: 'y' (yellow)
 8 # 黑色: 'k' (black)
 9 # 白色: 'w' (white)
10 
11 # 線型(linestyle 簡寫爲 ls):
12 # 實線: '-'
13 # 虛線: '--'
14 # 虛點線: '-.'
15 # 點線: ':'
16 # 點: '.' 
17 
18 # 點型(標記marker):
19 # 像素: ','
20 # 圓形: 'o'
21 # 上三角: '^'
22 # 下三角: 'v'
23 # 左三角: '<'
24 # 右三角: '>'
25 # 方形: 's'
26 # 加號: '+' 
27 # 叉形: 'x'
28 # 棱形: 'D'
29 # 細棱形: 'd'
30 # 三腳架朝下: '1'(像'丫')
31 # 三腳架朝上: '2'
32 # 三腳架朝左: '3'
33 # 三腳架朝右: '4'
34 # 六角形: 'h'
35 # 旋轉六角形: 'H'
36 # 五角形: 'p'
37 # 垂直線: '|'
38 # 水平線: '_'

 2.三、直方圖

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 np.random.seed(19680801)
 4 mu1, sigma1 = 100, 15
 5 mu2, sigma2 = 80, 15
 6 x1 = mu1 + sigma1 * np.random.randn(10000)
 7 x2 = mu2 + sigma2 * np.random.randn(10000)
 8 # the histogram of the data
 9 # 50:將數據分紅50組
10 # facecolor:顏色;alpha:透明度
11 # density:是密度而不是具體數值
12 n1, bins1, patches1 = plt.hist(x1, 50, density=True, facecolor='g', alpha=1)
13 n2, bins2, patches2 = plt.hist(x2, 50, density=True, facecolor='r', alpha=0.2)
14 # n:機率值;bins:具體數值;patches:直方圖對象。
15 plt.xlabel('Smarts')
16 plt.ylabel('Probability')
17 plt.title('Histogram of IQ')
18 plt.text(110, .025, r'$\mu=100,\ \sigma=15$')
19 plt.text(50, .025, r'$\mu=80,\ \sigma=15$')
20 # 設置x,y軸的具體範圍
21 plt.axis([40, 160, 0, 0.03])
22 plt.grid(True)
23 plt.show()

 2.四、扇形圖/餅圖

 1 import matplotlib.pyplot as plt
 2 import time
 3 from pylab import mpl
 4 import numpy as np
 5 import matplotlib.animation as animation
 6 import time
 7 
 8 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
 9 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題
10 
11 data = {'8516464': 106, '8085460': 704, '7593813': 491, '8709362': 24, '8707829': 6, '8684658': 23, '8679301': 11,
12         '8665923': 29, '8660909': 23, '8652968': 31, '8631727': 31, '8622935': 24, '8620593': 18, '8521737': 33,
13         '8605441': 49, '8495205': 82, '8477276': 57,'8474489': 71, '8456502': 50, '8446529': 68, '8433830': 136,
14         '8254158': 103, '8176029': 88, '8081724': 58, '7922592': 185, '7850099': 62,'7617723': 61, '7615562': 90,
15         '7615052': 57, '7604151': 102, '7511294': 59,'6951654': 27, '6946388': 142, '6945373': 159, '6937716': 347,
16         '7460176': 64, '7246377': 87, '7240621': 145, '7204707': 645, '7028401': 671}
17 source_data = sorted(data.items(), key=lambda x: x[1], reverse=True)
18 print(source_data)
19 labels = [source_data[i][0][:4] for i in range(len(source_data))]  # 設置標籤
20 fracs = [source_data[i][1] for i in range(len(source_data))]
21 explode = [x * 0.01 for x in range(len(source_data))]  # 與labels一一對應,數值越大離中心區越遠
22 plt.axes(aspect=1)  # 設置X軸 Y軸比例
23 # labeldistance標籤離中心距離  pctdistance百分百數據離中心區距離 autopct 百分比的格式 shadow陰影
24 plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.1f %%',
25         shadow=False, labeldistance=1.1, startangle=0, pctdistance=0.8, center=(-1, 0))
26 # 控制位置:bbox_to_anchor數組中,前者控制左右移動,後者控制上下。ncol控制 圖例所列的列數。默認值爲1。fancybox 圓邊
27 plt.legend(loc=7, bbox_to_anchor=(1.2, 0.80), ncol=3, fancybox=True, shadow=True, fontsize=8)
28 plt.show()

 1 import matplotlib.pyplot as plt
 2 labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
 3 sizes = [15, 30, 45, 10]
 4 # 設置分離的距離,0表示不分離
 5 explode = (0, 0.1, 0, 0) 
 6 plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
 7   shadow=True, startangle=90)
 8 # Equal aspect ratio 保證畫出的圖是正圓形
 9 plt.axis('equal') 
10 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 # 設置每環的寬度
 4 size = 0.3
 5 vals = np.array([[60., 32.], [37., 40.], [29., 10.]])
 6 # 經過get_cmap隨機獲取顏色
 7 cmap = plt.get_cmap("tab20c")
 8 outer_colors = cmap(np.arange(3)*4)
 9 inner_colors = cmap(np.array([1, 2, 5, 6, 9, 10]))
10 print(vals.sum(axis=1))
11 # [92. 77. 39.]
12 plt.pie(vals.sum(axis=1), radius=1, colors=outer_colors,
13   wedgeprops=dict(width=size, edgecolor='w'))
14 print(vals.flatten())
15 # [60. 32. 37. 40. 29. 10.]
16 plt.pie(vals.flatten(), radius=1-size, colors=inner_colors,
17   wedgeprops=dict(width=size, edgecolor='w'))
18 # equal 使得爲正圓
19 plt.axis('equal') 
20 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 np.random.seed(19680801)
 4 N = 10
 5 theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)
 6 radii = 10 * np.random.rand(N)
 7 width = np.pi / 4 * np.random.rand(N)
 8 ax = plt.subplot(111, projection='polar')
 9 bars = ax.bar(theta, radii, width=width, bottom=0.0)
10 # left表示從哪開始,
11 # radii表示從中心點向邊緣繪製的長度(半徑)
12 # width表示末端的弧長
13 # 自定義顏色和不透明度
14 for r, bar in zip(radii, bars):
15  bar.set_facecolor(plt.cm.viridis(r / 10.))
16  bar.set_alpha(0.5)
17 plt.show()

 2.五、動圖

 1 import matplotlib.pyplot as plt
 2 import time
 3 from pylab import mpl
 4 import numpy as np
 5 import matplotlib.animation as animation
 6 import time
 7 
 8 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
 9 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題
10 
11 
12 # Fixing random state for reproducibility
13 np.random.seed(196)
14 # 初始數據繪圖
15 dis = np.zeros(40)
16 dis2 = dis
17 fig, ax = plt.subplots()
18 line, = ax.plot(dis)
19 ax.set_ylim(-1, 1)
20 plt.grid(True)
21 ax.set_ylabel("distance: m")
22 ax.set_xlabel("time")
23 
24 def update(frame):
25     global dis
26     global dis2
27     global line
28     # 讀入模擬
29     a = np.random.rand() * 2 - 1
30     time.sleep(np.random.rand() / 10)
31     # 繪圖數據生成
32     dis[0:-1] = dis2[1:]
33     dis[-1] = a
34     dis2 = dis
35     # 繪圖
36     line.set_ydata(dis)
37     # 顏色設置
38     plt.setp(line, 'color', 'c', 'linewidth', 2.0)
39 ani = animation.FuncAnimation(fig, update, frames=None, interval=100)
40 plt.show()

 2.六、畫其餘圖形

 1 import matplotlib.pyplot as plt
 2 plt.rcdefaults()
 3  
 4 import numpy as np
 5 import matplotlib.pyplot as plt
 6 import matplotlib.path as mpath
 7 import matplotlib.lines as mlines
 8 import matplotlib.patches as mpatches
 9 from matplotlib.collections import PatchCollection
10  
11  
12 def label(xy, text):
13     y = xy[1] - 0.15  # shift y-value for label so that it's below the artist
14     plt.text(xy[0], y, text, ha="center", family='sans-serif', size=14)
15  
16  
17 fig, ax = plt.subplots()
18 # create 3x3 grid to plot the artists
19 grid = np.mgrid[0.2:0.8:3j, 0.2:0.8:3j].reshape(2, -1).T
20  
21 patches = []
22  
23 # add a circle
24 circle = mpatches.Circle(grid[0], 0.1, ec="none")
25 patches.append(circle)
26 label(grid[0], "Circle")
27  
28 # add a rectangle
29 rect = mpatches.Rectangle(grid[1] - [0.025, 0.05], 0.05, 0.1, ec="none")
30 patches.append(rect)
31 label(grid[1], "Rectangle")
32  
33 # add a wedge
34 wedge = mpatches.Wedge(grid[2], 0.1, 30, 270, ec="none")
35 patches.append(wedge)
36 label(grid[2], "Wedge")
37  
38 # add a Polygon
39 polygon = mpatches.RegularPolygon(grid[3], 5, 0.1)
40 patches.append(polygon)
41 label(grid[3], "Polygon")
42  
43 # add an ellipse
44 ellipse = mpatches.Ellipse(grid[4], 0.2, 0.1)
45 patches.append(ellipse)
46 label(grid[4], "Ellipse")
47  
48 # add an arrow
49 arrow = mpatches.Arrow(grid[5, 0] - 0.05, grid[5, 1] - 0.05, 0.1, 0.1, width=0.1)
50 patches.append(arrow)
51 label(grid[5], "Arrow")
52  
53 # add a path patch
54 Path = mpath.Path
55 path_data = [
56     (Path.MOVETO, [0.018, -0.11]),
57     (Path.CURVE4, [-0.031, -0.051]),
58     (Path.CURVE4, [-0.115,  0.073]),
59     (Path.CURVE4, [-0.03 ,  0.073]),
60     (Path.LINETO, [-0.011,  0.039]),
61     (Path.CURVE4, [0.043,  0.121]),
62     (Path.CURVE4, [0.075, -0.005]),
63     (Path.CURVE4, [0.035, -0.027]),
64     (Path.CLOSEPOLY, [0.018, -0.11])
65     ]
66 codes, verts = zip(*path_data)
67 path = mpath.Path(verts + grid[6], codes)
68 patch = mpatches.PathPatch(path)
69 patches.append(patch)
70 label(grid[6], "PathPatch")
71  
72 # add a fancy box
73 fancybox = mpatches.FancyBboxPatch(
74     grid[7] - [0.025, 0.05], 0.05, 0.1,
75     boxstyle=mpatches.BoxStyle("Round", pad=0.02))
76 patches.append(fancybox)
77 label(grid[7], "FancyBboxPatch")
78  
79 # add a line
80 x, y = np.array([[-0.06, 0.0, 0.1], [0.05, -0.05, 0.05]])
81 line = mlines.Line2D(x + grid[8, 0], y + grid[8, 1], lw=5., alpha=0.3)
82 label(grid[8], "Line2D")
83  
84 colors = np.linspace(0, 1, len(patches))
85 collection = PatchCollection(patches, cmap=plt.cm.hsv, alpha=0.3)
86 collection.set_array(np.array(colors))
87 ax.add_collection(collection)
88 ax.add_line(line)
89  
90 plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
91 plt.axis('equal')
92 plt.axis('off')
93  
94 plt.show()

 2.七、畫點圖

 1 from numpy import *;
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4  
 5 N = 50 
 6 x = np.random.rand(N) 
 7 y = np.random.rand(N) 
 8 colors = np.random.rand(N) 
 9 area = np.pi * (15 * np.random.rand(N))**2  
10 plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=(9, 3, 30))
11 plt.show()

 2.八、畫數學曲線

 1 #coding:utf-8
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4 x=np.linspace(0,10,1000)
 5 y=np.sin(x)
 6 z=np.cos(x**2)
 7 #控制圖形的長和寬單位爲英寸,
 8 # 調用figure建立一個繪圖對象,而且使它成爲當前的繪圖對象。
 9 plt.figure(figsize=(8,4))
10 #$可讓字體變得跟好看
11 #給所繪製的曲線一個名字,此名字在圖示(legend)中顯示。
12 # 只要在字符串先後添加"$"符號,matplotlib就會使用其內嵌的latex引擎繪製的數學公式。
13 #color : 指定曲線的顏色
14 #linewidth : 指定曲線的寬度
15 plt.plot(x,y,label="$sin(x)$",color="red",linewidth=2)
16 #b-- 曲線的顏色和線型
17 plt.plot(x,z,"b--",label="$cos(x^2)$")
18 #設置X軸的文字
19 plt.xlabel("Time(s)")
20 #設置Y軸的文字
21 plt.ylabel("Volt")
22 #設置圖表的標題
23 plt.title("PyPlot First Example")
24 #設置Y軸的範圍
25 plt.ylim(-1.2,1.2)
26 #顯示圖示
27 plt.legend()
28 #顯示出咱們建立的全部繪圖對象。
29 plt.show()

 1 #coding:utf-8
 2 import numpy as np
 3 import matplotlib.pyplot as plt
 4 x=np.arange(0,5,0.1)
 5 ## plot返回一個列表,經過line,獲取其第一個元素
 6 line,=plt.plot(x,x*x)
 7 # 調用Line2D對象的set_*方法設置屬性值 是否抗鋸齒
 8 line.set_antialiased(False)
 9 # 同時繪製sin和cos兩條曲線,lines是一個有兩個Line2D對象的列表
10 lines = plt.plot(x, np.sin(x), x, np.cos(x))
11 ## 調用setp函數同時配置多個Line2D對象的多個屬性值
12 plt.setp(lines, color="r", linewidth=2.0)
13 plt.show()

1 import numpy as np
2 import matplotlib.pyplot as plt
3 x = np.arange(0., 5., 0.2)
4 # 紅色破折號, 藍色方塊 ,綠色三角塊
5 plt.plot(x, x, 'r--', x, x**2, 'bs', x, x**3, 'g^')
6 plt.show()

 

 2.9.畫多個子圖

 1 import matplotlib.pyplot as plt
 2 '''
 3 subplot(numRows, numCols, plotNum)
 4 numRows行 * numCols列個子區域
 5 若是numRows,numCols和plotNum這三個數都小於10的話,能夠把它們縮寫爲一個整數,
 6 例如subplot(323)和subplot(3,2,3)是相同的
 7 '''
 8 for idx, color in enumerate("rgbyckbyc"):
 9     plt.subplot(330+idx+1, facecolor=color)
10 plt.show()
11 plt.subplot(221) # 第一行的左圖
12 plt.subplot(222) # 第一行的右圖
13 #第二行全佔
14 plt.subplot(212) # 第二整行
15 plt.show()
16 
17 plt.subplot(331, facecolor='r')
18 plt.show()

 2.十、標記刻度

 1 import matplotlib.pyplot as pl
 2 from matplotlib.ticker import MultipleLocator, FuncFormatter
 3 import numpy as np
 4 x = np.arange(0, 4*np.pi, 0.01)
 5 y = np.sin(x)
 6 pl.figure(figsize=(8,4))
 7 pl.plot(x, y)
 8 ax = pl.gca()
 9 
10 def pi_formatter(x, pos):
11     """
12     比較羅嗦地將數值轉換爲以pi/4爲單位的刻度文本
13     """
14     m = np.round(x / (np.pi/4))
15     n = 4
16     if m%2==0: m, n = m/2, n/2
17     if m%2==0: m, n = m/2, n/2
18     if m == 0:
19         return "0"
20     if m == 1 and n == 1:
21         return "$\pi$"
22     if n == 1:
23         return r"$%d \pi$" % m
24     if m == 1:
25         return r"$\frac{\pi}{%d}$" % n
26     return r"$\frac{%d \pi}{%d}$" % (m,n)
27 # 設置兩個座標軸的範圍
28 pl.ylim(-1.5,1.5)
29 pl.xlim(0, np.max(x))
30 # 設置圖的底邊距
31 pl.subplots_adjust(bottom = 0.15)
32 pl.grid() #開啓網格
33 # 主刻度爲pi/4
34 ax.xaxis.set_major_locator( MultipleLocator(np.pi/4) )
35 # 主刻度文本用pi_formatter函數計算
36 ax.xaxis.set_major_formatter( FuncFormatter( pi_formatter ) )
37 # 副刻度爲pi/20
38 ax.xaxis.set_minor_locator( MultipleLocator(np.pi/20) )
39 # 設置刻度文本的大小
40 for tick in ax.xaxis.get_major_ticks():
41     tick.label1.set_fontsize(16)
42 pl.show()

 2.十一、三維圖

 1 import matplotlib.pyplot as plt
 2 from mpl_toolkits.mplot3d import Axes3D
 3 import numpy as np
 4 
 5 def fun(x,y):
 6     #return np.power(x,2)+np.power(y,2)
 7     return 2*(x*0.8+y*0.1)*(x*0.2+y*0.9)*(x*0.3+y*0.7)*(x*0.3+y*0.7)*(x*0.4+y*0.7)*(x*0.4+y*0.7)
 8 
 9 def fun2(xx,yy):
10     return xx
11 
12 fig1=plt.figure()
13 ax=Axes3D(fig1)
14 X=np.arange(0,1,0.01)
15 Y=np.arange(0,1,0.01)
16 
17 XX=np.arange(0,1,0.01)
18 YY=np.arange(1,0,-0.01)
19 
20 ZZ=np.arange(0,1,0.01)
21 
22 ZZ,ZZ=np.meshgrid(ZZ,ZZ)
23 
24 #ZZ=fun2(XX,YY)
25 X,Y=np.meshgrid(X,Y)
26 Z=fun(X,Y)
27 plt.title("This is main title")
28 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.coolwarm)
29 
30 ax.plot_surface(XX, YY, ZZ, rstride=1, cstride=1, cmap=plt.cm.coolwarm)
31 
32 ax.set_xlabel(u'θ1', color='r')
33 ax.set_ylabel(u'θ2', color='g')
34 ax.set_zlabel('z label', color='b')
35 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from mpl_toolkits.mplot3d import Axes3D
 4 data = np.random.randint(0, 255, size=[40, 40, 40])
 5 x, y, z = data[0], data[1], data[2]
 6 ax = plt.subplot(111, projection='3d') # 建立一個三維的繪圖工程
 7 # 將數據點分紅三部分畫,在顏色上有區分度
 8 ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪製數據點
 9 ax.scatter(x[10:20], y[10:20], z[10:20], c='r')
10 ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
11 ax.set_zlabel('Z') # 座標軸
12 ax.set_ylabel('Y')
13 ax.set_xlabel('X')
14 plt.show()

 1 from matplotlib import pyplot as plt
 2 import numpy as np
 3 from mpl_toolkits.mplot3d import Axes3D
 4 fig = plt.figure()
 5 ax = Axes3D(fig)
 6 X = np.arange(-4, 4, 0.25)
 7 Y = np.arange(-4, 4, 0.25)
 8 X, Y = np.meshgrid(X, Y)
 9 R = np.sqrt(X**2 + Y**2)
10 Z = np.sin(R)
11 # 具體函數方法可用 help(function) 查看,如:help(ax.plot_surface)
12 ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
13 plt.show()

 2.十二、畫3d柱狀圖

 1 #-*- coding:utf-8 -*-
 2 import numpy as np
 3 import matplotlib as mpl
 4 import matplotlib.pyplot as plt
 5 import random
 6 import matplotlib.dates as mdates
 7  
 8 from mpl_toolkits.mplot3d import Axes3D
 9 #generate random numbers
10 Query_times1=range(0,50)
11 Query_times2=range(0,30)
12 list_random1=random.sample(Query_times1,25)
13 list_random2=random.sample(Query_times2,25)
14 mpl.rcParams['font.size'] = 8
15  
16 fig = plt.figure()
17 ax = fig.add_subplot(111, projection='3d')
18  
19 xs = np.arange(1,26)
20 ys =list_random1
21 ys2=list_random2
22 ys3=list_random1
23 ys4=list_random2
24 ys5=list_random1
25 ys6=list_random2
26 ys7=list_random1
27 ys8=list_random2
28 
29  
30 z1=3
31 total_width, n = 0.8, 2
32 width = total_width / n
33 color =plt.cm.Set2((np.arange(plt.cm.Set2.N)))
34 p1=ax.bar(xs, ys, z1, zdir='y', color='#FF0080', alpha=0.8,width=width,label='h=3,DA')
35 p2=ax.bar(xs + width, ys2, z1, zdir='y', color='CYAN', alpha=0.8,width=width,label='h=3,DGA')
36  
37 z2=4
38 total_width, n = 0.8, 2
39 width = total_width / n
40 color =plt.cm.Set2((np.arange(plt.cm.Set2.N)))
41 p3=ax.bar(xs, ys3, z2, zdir='y', color='b', alpha=0.8,width=width,label='h=4,DA')
42 p4=ax.bar(xs + width, ys4, z2, zdir='y', color='#9AFF02', alpha=0.8,width=width,label='h=4,DGA')
43  
44 z3=5
45 total_width, n = 0.8, 2
46 width = total_width / n
47 color =plt.cm.Set2((np.arange(plt.cm.Set2.N)))
48 p5=ax.bar(xs, ys5, z3, zdir='y', color='#FF8000', alpha=0.8,width=width,label='h=5,DA')
49 p6=ax.bar(xs + width, ys6, z3, zdir='y', color='violet', alpha=0.8,width=width,label='h=5,DGA')
50  
51 z4=6
52 total_width, n = 0.8, 2
53 width = total_width / n
54 color =plt.cm.Set2((np.arange(plt.cm.Set2.N)))
55 p7=ax.bar(xs, ys7, z4, zdir='y', color='r', alpha=0.8,width=width,label='h=6,DA')
56 p8=ax.bar(xs + width, ys8, z4, zdir='y', color='#0072E3', alpha=0.8,width=width,label='h=6,DGA')
57  
58 # ax.xaxis.set_major_locator(mpl.ticker.FixedLocator(xs))
59 # ax.yaxis.set_major_locator(mpl.ticker.FixedLocator(ys))
60  
61 ax.set_xlabel('k-')
62 ax.set_ylabel('Spatial hierarchy (h)')
63 ax.set_zlabel('Count')
64 # plt.legend(loc='upper left')
65 #plt.legend(loc='upper left', bbox_to_anchor=(0.0,0.6),ncol=1,fancybox=True,shadow=False)#Control the position of the legend
66 plt.show()

 2.1三、柱狀圖、並列柱狀圖

 1 import numpy as np
 2 import matplotlib.animation as animation
 3 import time
 4 
 5 mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體
 6 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題
 7 
 8 source_data = {'mock_verify': 369, 'mock_notify': 192, 'mock_sale': 517}  # 設置原始數據
 9 
10 for a, b in source_data.items():
11     plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=11)  # ha 文字指定在柱體中間, va指定文字位置 fontsize指定文字體大小
12 
13 # 設置X軸Y軸數據,二者均可以是list或者tuple
14 x_axis = tuple(source_data.keys())
15 y_axis = tuple(source_data.values())
16 plt.bar(x_axis, y_axis, color='rg')  # 若是不指定color,全部的柱體都會是一個顏色
17 
18 plt.xlabel(u"渠道名")  # 指定x軸描述信息
19 plt.ylabel(u"訪問量")  # 指定y軸描述信息
20 plt.title("渠道訪問量統計表")  # 指定圖表描述信息
21 plt.ylim(0, 600)  # 指定Y軸的高度
22 # plt.savefig('{}.png'.format(time.strftime('%Y%m%d%H%M%S')))  # 保存爲圖片
23 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 x = [1,2]   #橫座標
 4 y = [3,4]   #第一個縱座標
 5 y1 = [5,6]   #第二個縱座標
 6 x = np.arange(len(x))  #首先用第一個的長度做爲橫座標
 7 width = 0.05    #設置柱與柱之間的寬度
 8 fig,ax = plt.subplots()
 9 ax.bar(x,y,width,alpha = 0.9)
10 ax.bar(x+width,y1,width,alpha = 0.9,color= 'red')
11 ax.set_xticks(x +width/2)#將座標設置在指定位置
12 ax.set_xticklabels(x)#將橫座標替換成
13 plt.show()

 1 # -*- coding: utf-8 -*-
 2 import matplotlib.pyplot as plt
 3  
 4 name_list = ['Monday','Tuesday','Friday','Sunday']
 5 num_list = [1.5,0.6,7.8,6]
 6 num_list1 = [1,2,3,1]
 7 x =list(range(len(num_list)))
 8 total_width, n = 0.8, 2
 9 width = total_width / n
10  
11 plt.bar(x, num_list, width=width, label='boy',fc = 'y')
12 for i in range(len(x)):
13     x[i] = x[i] + width
14 plt.bar(x, num_list1, width=width, label='girl',tick_label = name_list,fc = 'r')
15 plt.legend()
16 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 size = 5
 4 a = np.random.random(size)
 5 b = np.random.random(size)
 6 c = np.random.random(size)
 7 x = np.arange(size)
 8 # 有多少個類型,只需更改n便可
 9 total_width, n = 0.8, 3 
10 width = total_width / n
11 # 從新擬定x的座標
12 x = x - (total_width - width) / 2
13 # 這裏使用的是偏移
14 plt.bar(x, a, width=width, label='a')
15 plt.bar(x + width, b, width=width, label='b')
16 plt.bar(x + 2 * width, c, width=width, label='c')
17 plt.legend()
18 plt.show()

 2.1三、堆疊柱狀圖

 1 # -*- coding: utf-8 -*-
 2 import matplotlib.pyplot as plt
 3  
 4 name_list = ['Monday','Tuesday','Friday','Sunday']
 5 num_list = [1.5,0.6,7.8,6]
 6 num_list1 = [1,2,3,1]
 7 plt.bar(range(len(num_list)), num_list, label='boy',fc = 'y')
 8 plt.bar(range(len(num_list)), num_list1, bottom=num_list, label='girl',tick_label = name_list,fc = 'r')
 9 plt.legend()
10 plt.show()

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 size = 5
 4 a = np.random.random(size)
 5 b = np.random.random(size)
 6 c = np.random.random(size)
 7 x = np.arange(size)
 8 # 這裏使用的是偏移
 9 plt.bar(x, a, width=0.5, label='a',fc='r')
10 plt.bar(x, b, bottom=a, width=0.5, label='b', fc='g')
11 plt.bar(x, c, bottom=a+b, width=0.5, label='c', fc='b')
12 plt.ylim(0, 2.5)
13 plt.legend()
14 plt.grid(True)
15 plt.show()

 2.1四、橫排柱狀圖

1 # -*- coding: utf-8 -*-
2 import matplotlib.pyplot as plt
3  
4 name_list = ['Monday','Tuesday','Friday','Sunday']
5 num_list = [1.5,0.6,7.8,6]
6 plt.barh(range(len(num_list)), num_list,tick_label = name_list)
7 plt.show()

3、總結

       使用python中的庫,咱們能夠按照本身的想法來畫圖,可是須要注意一些細節上的東西,好比尺寸和刻度,好比顏色,字體,以及相應對比的數據,特別是用於數據分析上面的對比,咱們須要重點掌握。數組

相關文章
相關標籤/搜索