python -- 数据可视化(二)

python -- 数据可视化

 一、Matplotlib 绘图


 1、图形对象(图形窗口)

mp.figure(窗口名称, figsize=窗口大小, dpi=分辨率,
                   facecolor=颜色)
如果"窗口名称"是第一次出现,那么就创建一个新窗口,其标题栏显示该名称,如果"窗口名称"已经出现过,那么不再创建新窗口,而只是将与该名称相对应的窗口设置为当前窗口。所谓当前窗口,就是接受后续绘图操作的窗口。
mp.title(标题文本, fontsize=字体大小)
mp.xlabel(水平轴标签, fontsize=字体大小)
mp.ylabel(垂直轴标签, fontsize=字体大小)
mp.tick_params(..., labelsize=刻度标签字体大小, ...)
mp.grid(linestyle=网格线型)
mp.tight_layout() # 紧凑布局

demo:

from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
x = np.linspace(-np.pi, np.pi, 1000)            # -π — π,平分为1000等份
cos_y = np.cos(x) / 2
sin_y = np.sin(x)
mp.figure('Figure Object 1', figsize=(4, 3), dpi=120,
          facecolor='lightgray')                # figsize:窗口比例 ;dpi:像素 ;   facecolor:颜色
mp.title('Figure Object 1', fontsize=16)
mp.xlabel('x', fontsize=12)
mp.ylabel('y', fontsize=12)
mp.tick_params(labelsize=8)
mp.grid(linestyle=':')
mp.tight_layout()
mp.figure('Figure Object 2', figsize=(4, 3), dpi=120,
          facecolor='lightgray')
mp.title('Figure Object 2', fontsize=16)
mp.xlabel('x', fontsize=12)
mp.ylabel('y', fontsize=12)
mp.tick_params(labelsize=8)
mp.grid(linestyle=':')
mp.tight_layout()
mp.figure('Figure Object 1')        # 覆盖第一个窗口
mp.plot(x, cos_y, c='dodgerblue',
        label=r'$y=\frac{1}{2}cos(x)$')
mp.legend()
mp.figure('Figure Object 2')
mp.plot(x, sin_y, c='orangered',
        label=r'$y=sin(x)$')        # label为备注
mp.legend()
mp.show()

界面:

     


 

2、条形图

mp.bar(水平坐标, 高度, 宽度[, 底坐标], color=颜色,
    alpha=透明度, label=图例标签)

demo:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
apples = np.array([
    30, 25, 22, 36, 21, 29, 20, 24, 33, 19, 27, 15])
oranges = np.array([
    24, 33, 19, 27, 35, 20, 15, 27, 20, 32, 20, 22])
mp.figure('Bar', facecolor='lightgray')   # 绘图窗口
mp.title('Bar', fontsize=20)
mp.xlabel('Month', fontsize=14)
mp.ylabel('Price', fontsize=14)
mp.tick_params(labelsize=10)        # x、y label的字体大小
mp.grid(axis='y', linestyle=':')    # 网格线,y方向,点线类型
mp.ylim((0, 40))                    # y轴范围:0-40
x = np.arange(len(apples))
mp.bar(x, apples, 0.4, color='dodgerblue',
       label='Apple')                # 0.4:宽度 ;
mp.bar(x + 0.3, oranges, 0.4, color='orangered',
       label='Orange', alpha=0.75)    # x+0.3:水平坐标,在x基础上便宜0.3
mp.xticks(x + 0.1, [
    'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
    'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'])   # x+0.1:x轴偏移0.1 ;  mp.xticks(位置序列[, 标签序列])
mp.legend()
mp.show()

界面:

 


 

3、饼图

mp.pie(值, 间隙, 标签, 颜色, 格式,
    shadow=是否带阴影, startangel=起始角度)

demo:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
values = [26, 17, 21, 29, 11]
spaces = [0.05, 0.01, 0.01, 0.01, 0.01]   # 偏移值,每个饼分图之间的距离
labels = ['Python', 'JavaScript',
          'C++', 'Java', 'PHP']
colors = ['dodgerblue', 'orangered',
          'limegreen', 'violet', 'gold']
mp.figure('Pie', facecolor='lightgray')
mp.title('Pie', fontsize=20)
mp.pie(values, spaces, labels, colors, '%d%%',
       shadow=True, startangle=90)        # shadow:阴影 ;  startangle:角度
# 等轴比例
mp.axis('equal')
mp.show()

界面:

 


4、等高线图

mp.contourf(x, y, z, 阶数, cmap=颜色映射)
mp.contour(x, y, z, 阶数, linewidths=线宽)

demo:

from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
n = 1000
# 网格化
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(
    -x ** 2 - y ** 2)
mp.figure('Contour', facecolor='lightgray')
mp.title('Contour', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 绘制等高线图
mp.contourf(x, y, z, 8, cmap='jet')
cntr = mp.contour(x, y, z, 8, colors='black',
                  linewidths=0.5)
# 为等高线图添加高度标签
mp.clabel(cntr, inline_spacing=1, fmt='%.1f',
          fontsize=10)
mp.show()

界面:

 


 5、热成像图

# origin ↓↓↓: 
#    hight: 缺省,原点在左上角
#    low:原点在左下角
mp.imshow(矩阵, cmap=颜色映射, origin=纵轴方向)


#demo:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
n = 1000
# 网格化
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(
    -x ** 2 - y ** 2)
mp.figure('Hot', facecolor='lightgray')
mp.title('Hot', fontsize=20)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 绘制热成像图
mp.imshow(z, cmap='jet', origin='low')
mp.colorbar().set_label('z', fontsize=14)
mp.show()

界面:

 


 

6、极坐标系

mp.gca(projection='polar')
水平坐标 -> 极角
垂直坐标 -> 极径
mp.plot(水平坐标, 垂直坐标, ...)
mp.plot(极角, 极径, ...)

demo:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
t = np.linspace(0, 2 * np.pi, 1001)  # 1001个点,1000等分
r_spiral = 0.8 * t  # 阿基米德螺旋线
r_rose = 5 * np.sin(6 * t)  # 六元玫瑰线
mp.figure('Polar', facecolor='lightgray')
mp.gca(projection='polar')  # 设置极坐标系
mp.title('Polar', fontsize=20)
mp.xlabel(r'$\theta$', fontsize=14)
mp.ylabel(r'$\rho$', fontsize=14)
mp.tick_params(labelsize=10)
mp.grid(linestyle=':')
# 函数值   = f (自变量)
# 垂直坐标 = f (水平坐标)
# 极径     = f (极角)
mp.plot(t, r_spiral, c='dodgerblue',
        label=r'$\rho=0.8\theta$')
mp.plot(t, r_rose, c='orangered',
        label=r'$\rho=5sin(6\theta)$')
mp.legend()
mp.show()

界面:

 


 

7、三维曲面

from mpl_toolkits.mplot3d import axes3d    #3d
ax = mp.gca(projection='3d') # class axes3d 指定
ax.set_xlabel(...)
...
ax.plot_surface(x, y, z, rstride=行跨距, cstride=列跨距,
    cmap=颜色映射)   # 用于绘制表面图
ax.plot_wireframe(x, y, z, rstride=行跨距, cstride=列跨距,
    linewidth=线宽, color=颜色)     # 用于绘制三维线框图

demo: 

 1)三维表面图

import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d
n = 1000
# 网格化
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(
    -x ** 2 - y ** 2)
mp.figure('3D Surface')
# 创建三维坐标系
ax = mp.gca(projection='3d')  # 返回axes3d类的对象
mp.title('3D Surface', fontsize=20)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)
# 绘制三维表面图
ax.plot_surface(x, y, z, rstride=10, cstride=10,
                cmap='jet')
mp.show()

界面:

 

2)三维线框图

from __future__ import unicode_literals
import numpy as np
import matplotlib.pyplot as mp
from mpl_toolkits.mplot3d import axes3d
n = 1000
# 网格化
x, y = np.meshgrid(np.linspace(-3, 3, n),
                   np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(
    -x ** 2 - y ** 2)

mp.figure('3D Wireframe')
# 创建三维坐标系
ax = mp.gca(projection='3d')  # 返回axes3d类的对象
mp.title('3D Wireframe', fontsize=20)
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
mp.tick_params(labelsize=10)
# 绘制三维线框图
ax.plot_wireframe(x, y, z, rstride=30, cstride=30,
                  linewidth=0.5, color='dodgerblue')
mp.show()

界面:

 


 二、numpy

1、读取文件

# 逻辑上可被解释为二维数组的文本文件:
# 数据项1<分隔符>数据项2<分隔符>...<分隔符>数据项n ...
numpy.loadtxt(
    文件路径,
    delimiter=分隔符(默认空格),
    usecols=列序列(默认读取所有列),
    unpack=是否展开列(默认为False),
    dtype=元素类型(默认为float),
    converters=转换器字典(默认不做转换))
# unpack=False: 一个二维数组
# unpack=True: 多个一维数组

 

demo:

import numpy as np
# 读取aapl.csv中的某些列数据
dates, opening_prices, highest_prices, lowest_prices, closing_prices = np.loadtxt(
        '../../data/aapl.csv',   # 文件路径
        delimiter=',', 
        usecols=(1, 3, 4, 5, 6),   # 读取1,3,4,5,6 列的数据,从0计数
        unpack=True,    # 展开成多个一维数组
        dtype='M8[D], f8, f8, f8, f8',    # 每列读取出来的元素类型不一样
        ) 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


 

转载于:https://www.cnblogs.com/Eric15/p/11224964.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值