数据可视化:利用计算机图形学和图像处理技术,将数据转换为图形或者
图像在屏幕上显示出来进行交互处理的理论方法和技术。
数据可视化随着平台的拓展、应用领域的增加,表现形式的不断变化,从原始的BI统计图表,到不断增加的诸如实时动态效果、地理信息、用户交互等等。数据可视化的概念边界不断扩大
数值型适合用能够量化的视觉通道表示,如坐标
、长度等
序列型适合用区分度明显的视觉通道表示,比如
密度、饱和度。
类别型适合用易于分组的视觉通道。
常见图表类型
绘制余弦曲线散点图。
import numpy as np
import matplotlib.pylab as pl
x = np.arange(0, 2.0*np.pi, 0.1) #x轴数据
y = np.cos(x) #y轴数据
pl.scatter(x, y) #绘制散点图
pl.show() #显示绘制的结果图像
绘制大小与位置有关的红色散点五角星。
import matplotlib.pylab as pl
from numpy.random import randint
x = randint(1, 20, 50) #模拟x轴数据
y = x + randint(-10, 10, 50) #生成y轴数据
pl.scatter(x, y, s=x*y, c='r', marker='*')
pl.show()
饼状图绘制与属性设置。
import numpy as np
import matplotlib.pyplot as plt
labels = ('Frogs', 'Hogs', 'Dogs', 'Logs')
colors = ('#FF0000', 'yellowgreen', 'gold', 'blue')
explode = (0, 0.02, 0, 0.08) #使所有饼状图中第2片和第4片裂开
fig = plt.figure(num=1,figsize=(10,8),dpi=110,facecolor='white')
ax = fig.gca() #获取当前轴
ax.pie(np.random.random(4), explode=explode, labels=labels,
colors=colors, pctdistance=0.8, autopct='%1.1f%%',
shadow=True, startangle=90, radius=0.25, center=(0, 0),
counterclock=False, frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels,
colors=colors, autopct='%1.1f%%', shadow=True,
startangle=45, radius=0.25, center=(1, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels,
colors=colors, autopct='%1.1f%%', shadow=True,
startangle=90, radius=0.25, center=(0, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels,
colors=colors, autopct='%1.2f%%', shadow=False,
startangle=135, radius=0.35, center=(1, 0), frame=True)
ax.set_xticks([0, 1]) #设置x坐标轴刻度
ax.set_yticks([0, 1]) #设置y轴坐标轴刻度
ax.set_xticklabels(["Sunny", "Cloudy"])#设置坐标轴刻度上的标签
ax.set_yticklabels(["Dry", "Rainy"])
ax.set_xlim((-0.5, 1.5)) #设置坐标轴跨度
ax.set_ylim((-0.5, 1.5))
ax.set_aspect('equal') #设置纵横比相等
plt.show()
绘制柱状图并设置图形属性和文本标注。
import numpy as np
import matplotlib.pyplot as plt
#生成测试数据
x = np.linspace(0, 10, 11)
y = 11-x
#绘制柱状图
plt.bar(x, y, color='#772277', alpha=0.8, edgecolor='blue',
linestyle='--', linewidth=1,hatch='*')
#为每个柱形添加文本标注
for xx, yy in zip(x,y):
plt.text(xx-0.2, yy+0.1, '%2d' % yy)
#显示图形
plt.show()
绘制雷达图
import numpy as np
import matplotlib.pyplot as plt
labels = np.array(list('abcdefghij')) #设置标签
data = np.array([11,4]*5) #创建模拟数据
dataLength = len(labels) #数据长度
#angles数组把圆周等分为dataLength份
angles = np.linspace(0, 2*np.pi, dataLength, endpoint=False)
data = np.append(data, data[0])
angles = np.append(angles, angles[0]) #首尾相接,使得曲线闭合
#绘制雷达图
plt.polar(angles, data, 'rv--', linewidth=2)
#设置角度网格标签
plt.thetagrids(angles*180/np.pi, labels)
#设置填充色
plt.fill(angles, data, facecolor='r', alpha=0.6)
plt.ylim(0,12) #设置坐标跨度
plt.show() #显示绘图结果
绘制三维曲线。
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams['legend.fontsize'] = 10 #设置图例字号
fig = plt.figure()
ax = fig.gca(projection='3d') #绘制三维图形
theta = np.linspace(-4 * np.pi, 4 * np.pi, 200)
z = np.linspace(-4, 4, 200)*0.4 #创建模拟数据
#z的步长应与theta一致
r = z**3 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend() #显示图例
plt.show() #显示绘制结果
绘制三维曲面。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
x,y = np.mgrid[-4:4:80j, -4:4:40j]
z = 50 * np.sin(x+y) #创建测试数据
ax = plt.subplot(projection='3d') #绘制三维图形
ax.plot_surface(x, y, z, rstride=2, cstride=1, color='red', )
ax.set_xlabel('X') #设置坐标轴标签
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
绘制三维柱状图。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
x = np.random.randint(0, 40, 10) #创建测试数据
y = np.random.randint(0, 40, 10)
z = 80*abs(np.sin(x+y))
ax = plt.subplot(projection='3d') #绘制三维图形
ax.bar3d(x, y, np.zeros_like(z), dx=1, dy=1, dz=z, color='red') #设置面片颜色为红色
ax.set_xlabel('X') #设置坐标轴标签
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
切分绘图区域并绘制图形。
import numpy as np
import matplotlib.pyplot as plt
x= np.linspace(0, 2*np.pi, 500) #创建自变量数组
y1 = np.sin(x) #创建函数值数组
y2 = np.cos(x)
y3 = np.sin(x*x)
plt.figure() #创建图形
ax1 = plt.subplot(2, 2, 1)
ax2 = plt.subplot(2,2,2) #选择两行两列的第二个区域
ax3 = plt.subplot(212, facecolor='y')
plt.sca(ax1) #选择ax1
plt.plot(x, y1, color='red') #绘制红色曲线
plt.ylim(-1.2, 1.2) #限制y坐标轴范围
plt.sca(ax2) #选择ax2
plt.plot(x, y2, 'b--') #绘制蓝色虚线
plt.ylim(-1.2,1.2)
plt.sca(ax3) #选择ax3
plt.plot(x, y3, 'g--')
plt.ylim(-1.2, 1.2)
plt.show()
设置图例显示公式。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 500)
y = np.sinc(x)
z = np.cos(x*x)
plt.figure(figsize=(8,4))
plt.plot(x, y, label='$sinc(x)$', color='red', linewidth=2)
plt.plot(x, z, 'b--', label='$cos(x^2)$')
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('Sinc and Cos figure using pyplot')
plt.ylim(-1.2,1.2)
plt.legend() #显示图例
plt.show() #显示绘图结果
设置图例位置、背景颜色、边框颜色等属性。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
t = np.arange(0.0, 2*np.pi, 0.01)
s = np.sin(t)
z = np.cos(t)
plt.plot(t, s, label='正弦')
plt.plot(t, z, label='余弦')
plt.title('sin-cos函数图像', fontproperties='STLITI', fontsize=24)
myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\STKAITI.ttf')
plt.legend(prop=myfont, title='Legend', loc='lower left',
bbox_to_anchor=(0.43,0.75), shadow=True,
facecolor='yellowgreen', edgecolor='red',
ncol=2, markerfirst=False)
plt.show()
设置坐标轴刻度距离和文本。
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)
plt.plot(x, y)
plt.xticks(np.arange(0, 2*np.pi, 0.5))
plt.yticks([-1, -0.5, 0, 0.75, 1],
['负一', '负零点五', '零', '零点七五', '一'],
fontproperties='STKAITI')
plt.show()