首页 > 后端开发 > Python教程 > 【Python教程】绘制仪表盘图

【Python教程】绘制仪表盘图

黄舟
发布: 2017-02-07 16:22:11
原创
3334 人浏览过

Bokeh(Bokeh.js)是一个可在Python中提供交互式的可视化库,其支持Web浏览器,并提供类似于D3.js软件一样的完美展示功能。本文简单介绍如何使用该程序库绘制仪表盘图,具体操作如下:

导入命令

1)设置工作环境

1

%cd "F:\\Dropbox\\python"

登录后复制

2)导入程序包

1

2

3

4

5

6

7

8

9

10

11

import matplotlib.pyplot as plt

import numpy as np

from matplotlib.image import BboxImage

from matplotlib._png import read_png

import matplotlib.colors

from matplotlib.cbook import get_sample_data

from collections import OrderedDict

from math import log, sqrt

import numpy as np

import pandas as pd

from bokeh.plotting import figure, show, output_file

登录后复制

3)读取数据

1

df =pd.read_csv("stata_auto.csv" )

登录后复制

4)定义参数并绘制图像

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

drug_color = OrderedDict([

("price", "#0d3362"),

("weight", "#c64737"),

("rep78", "black" ),

])

gram_color = {

"Domestic" : "#aeaeb8",

"Foreign" : "#e69584",

}

width = 800

height = 800

inner_radius = 90

outer_radius = 300 - 10

minr = sqrt(log(.001 * 1E4))

maxr = sqrt(log(1000 * 1E4))

a = (outer_radius - inner_radius) / (minr - maxr)

b = inner_radius - a * maxr

def rad(mic):

return a * np.sqrt(np.log(mic * 1E4)) + b

big_angle = 2.0 * np.pi / (len(df) + 1)

small_angle = big_angle / 7

x = np.zeros(len(df))

y = np.zeros(len(df))

output_file("burtin.html", title="burtin.py example")

p = figure(plot_width=width, plot_height=height, title="",

x_axis_type=None, y_axis_type=None,

x_range=[-420, 420], y_range=[-420, 420],

min_border=0, outline_line_color="black",

background_fill="#f0e1d2", border_fill="#f0e1d2")

p.line(x+1, y+1, alpha=0)

angles = np.pi/2 - big_angle/2 - df.index.to_series()*big_angle

colors = [gram_color[gram] for gram in df.foreign]

p.annular_wedge(

x, y, inner_radius, outer_radius, -big_angle+angles, angles, color=colors,

)

p.annular_wedge(x, y, inner_radius, rad(df.price),

-big_angle+angles+5*small_angle, -big_angle+angles+6*small_angle,

color=drug_color['price'])

p.annular_wedge(x, y, inner_radius, rad(df.mpg),

-big_angle+angles+3*small_angle, -big_angle+angles+4*small_angle,

color=drug_color['weight'])

p.annular_wedge(x, y, inner_radius, rad(df.gear_ratio),

-big_angle+angles+1*small_angle, -big_angle+angles+2*small_angle,

color=drug_color['rep78'])

labels = np.power(10.0, np.arange(-3, 4))

radii = a * np.sqrt(np.log(labels * 1E4)) + b

p.circle(x, y, radius=radii, fill_color=None, line_color="white")

p.text(x[:-1], radii[:-1], [str(r) for r in labels[:-1]],

text_font_size="8pt", text_align="center", text_baseline="middle")

p.annular_wedge(x, y, inner_radius-10, outer_radius+10,

-big_angle+angles, -big_angle+angles, color="black")

xr = radii[0]*np.cos(np.array(-big_angle/2 + angles))

yr = radii[0]*np.sin(np.array(-big_angle/2 + angles))

label_angle=np.array(-big_angle/2+angles)

label_angle[label_angle < -np.pi/2] += np.pi # easier to read labels on the left side

p.text(xr, yr, df.make, angle=label_angle,

text_font_size="9pt", text_align="center", text_baseline="middle")

p.circle([-40, -40], [-370, -390], color=list(gram_color.values()), radius=5)

p.text([-30, -30], [-370, -390], text=["Gram-" + gr for gr in gram_color.keys()],

text_font_size="7pt", text_align="left", text_baseline="middle")

p.rect([-40, -40, -40], [18, 0, -18], width=30, height=13,

color=list(drug_color.values()))

p.text([-15, -15, -15], [18, 0, -18], text=list(drug_color.keys()),

text_font_size="9pt", text_align="left", text_baseline="middle")

p.xgrid.grid_line_color = None

p.ygrid.grid_line_color = None

show(p)

登录后复制


输出图像如下

985.jpg



以上就是【Python教程】绘制仪表盘图的内容,更多相关内容请关注PHP中文网(www.php.cn)!


相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板