Python数据可视化(学习笔记)

Python数据可视化

1 柱状图

普通柱状图
  • 基本语法

    plt.bar(x, data, tick_label= , label= , bottom= , color= , width= )
    # x:所有柱子的下标列表,可以是list(range(5)),也可以是numpy.arange(5)数组
    # data:数据列表
    # tick_label:每个柱子标签列表,['G1', 'G2', 'G3', 'G4', 'G5']
    # label:不同柱状图的标签
    # bottom:叠加柱状图的底
    # color:柱子颜色,可以是一个颜色,也可以是不同颜色的列表,默认有不同颜色
    # width:柱子的宽度,默认是0.8
    plt.title('柱状图的标题')
    plt.xlabel('x轴的标签')
    plt.ylabel('y轴的标签')
    plt.ylim(0, 100, 10)# y周从0-100,每10分隔一次
    plt.legend(loc='best')# 将图例label显示出来
    
  • 代码示例

    import matplotlib.pyplot as plt
    N = 5
    x = list(range(N))
    x_label = ['G1', 'G2', 'G3', 'G4', 'G5']
    menMeans = [11, 12, 14, 12, 10]
    womenMeans = [13, 9, 20, 22, 8]
    plt.bar(x, menMeans, label='men', tick_label=x_label)
    plt.bar(x, womenMeans, bottom=menMeans, label='women')
    plt.xlabel('Group')
    plt.ylabel('numbers')
    plt.ylim(0, 50, 10)
    plt.title('numbers by gender and group')
    plt.legend()
    plt.show()
    
横向条形图

就是把bar()函数改成barh()函数

并列柱状图

就是把第二个柱形图的bar()中的x都加上柱子的宽度


2 饼状图

  • 基本语法

    plt.pie(x, labels= , colors= , explode= , autopct= , startangle= , radius= , shadow= )
    # x:每块饼的数据列表,可以大于1 那么自动计算比列,可以小于1 空出剩余部分
    # labels:标签列表 ['A', 'B', 'C', 'D']
    # colors:颜色列表,默认不同颜色
    # explode:每块离开中心的距离 [0, 0, 0.1, 0]第三块离开中心位置,默认都为0
    # autopct:控制饼状图的百分比设置,整数百分数('%d%%')、浮点型百分数('%1.3f%%')、字符串百分数('%s%%')
    # startangle:起始绘制角度,默认x轴正方向,逆时针方向。常设置startangle=90,从y轴正方向画
    # radius:饼状图的半径,默认None,半径为1
    
  • 代码示例

# 饼状图实战
import matplotlib.pyplot as plt
# 正常中文显示,黑体
plt.rcParams['font.sans-serif'] = ['simhei']
data = [10, 20, 30, 40]
# data = [0.1, 0.2, 0.3, 0.1]
data_label = ['A', 'B', 'C', 'D']
explode = [0, 0, 0.1, 0]
plt.pie(data, labels=data_label, explode=explode,autopct='%1.2f%%')
plt.title('data by group')
plt.show()


3 折线图

  • 基本语法

    plt.plot(x, color= , linewidth= , linestyle= , label= )
    # x:折线图上每个点的数据列表
    # color:折线的颜色
    	常见折线颜色有 r红色 g绿色 b蓝色 c青色 m品红色 y黄色 w白色 k黑色
    # linewidth:折线的宽度
    # linestyle:折线的样式
    	常见折线样式有 --- , : , -.
        			o , v , s , ^
    # label:折线的标签
    
  • 代码示例

    import matplotlib.pyplot as plt
    import matplotlib.font_manager as fm #中文正常显示
    data = [1, 2, 3, 6, 9, 10, 4, 8]
    data2 = [3, 10, 13, 7, 4, 0, 2, 2]
    plt.plot(data, color='k', linewidth=5, linestyle='-', label='data1')
    plt.plot(data2,color='g', linewidth=5, linestyle='--', label='data2')
    plt.legend()
    plt.xlabel('x轴名称', fontproperties='simhei')
    plt.ylabel('y轴名称', fontproperties='simhei')
    plt.show()
    

4 散点图

  • 基本语法

    plt.scatter(x, y, s= , c= , marker= , alpha= , linewidths= , edgecolors=)
    # x,y:散点坐标
    # s:散点的面积大小
    # c:散点的颜色
    # marker:散点的标记
    # alpha:散点的透明度
    # linewidths:散点边缘线宽
    # edgecolors:散点边缘颜色
    
  • 代码示例

    # 散点图实战
    import matplotlib.pyplot as plt
    

import numpy as np
N = 10
x = np.random.rand(N)
y = np.random.rand(N)
size = (30*np.random.rand(N))**2
color = np.random.rand(N)
plt.scatter(x, y, s=size, c=color, alpha=0.8, marker=‘o’)
plt.show()



***

## 5 雷达图

- 基本语法

```python
plt.polar(theta, r, 'ro-', lw=2)
# thata:极角,一般为np.array([0.2, 0.3, 0.1, 0.6])
# r:极径,通常为数据列表
# ‘ro-’:数据点的标签,为红色圆形数据点,并用实值线连接起来
# lw=2:极坐标图形的宽度
  • 代码示例

    ## 完整的雷达图
    import matplotlib.pyplot as plt
    import numpy as np
    theta = np.array([0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2])
    r = [75, 20, 50, 37, 61, 28, 66, 50]
    # 极角和极径末尾都添加首位元素,使雷达图闭合
    theta = np.append(theta, theta[0])
    r.append(r[0])
    plt.polar(theta*np.pi, r, 'ro-', lw=2)
    # 雷达面填充颜色
    plt.fill(theta*np.pi, r, facecolor='r', alpha=0.25)
    # 极轴的上下限
    plt.ylim(0, 100)
    plt.title('雷达图')
    plt.show()
    
    
    import numpy as np
    import matplotlib.pyplot as plt
    scores = [82, 95, 72, 85, 45, 58, 65, 86]
    courses = ['C++', 'Python', '高等数学', '大学英语', '软件工程', '组成原理', '操作系统', '网络工程']
    datalength = len(courses)
    # angles数组把圆周等分成datalength份endpoint=False不包含终点
    angles = np.linspace(0, 2*np.pi, datalength, endpoint=False)
    # 极角和极径末尾都添加首位元素,使雷达图闭合
    scores.append(scores[0])
    angles = np.append(angles, angles[0])
    plt.polar(angles, scores, 'ro--', lw=2)
    # 设置角度网格标签
    plt.thetagrids(angles*180/np.pi, courses, fontproperties='simhei')
    # 填充雷达图内部
    plt.fill(angles, scores, facecolor='r', alpha=0.25)
    plt.show()
    

6 三维图

三维曲线图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
# 导入3D对象
from mpl_toolkits.mplot3d import Axes3D
# 绘制三维子图(2种方式)
ax = plt.subplot(projection='3d') 
# 方式2
# fig = plt.figure()
# ax = fig.gca(projection='3d')

# 测试数据
theta = np.linspace(-4*np.pi, 4*np.pi, 100)
z = np.linspace(-4, 4, 100)*0.3
r = z ** 4 + 1
x = r * np.sin(theta)
y = r * np.cos(theta)
# 绘制三维曲线
ax.plot(x, y, z, 'b^-', label='3D Picture Test')
# 3维图形的标签
mpl.rcParams['legend.fontsize'] = 10
ax.legend()
plt.show()

三维柱状图

# 三维柱状图
import matplotlib.pyplot as plt
import numpy as np
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')
for xx, yy, zz in zip(x, y, z):
    color = np.random.rand(3)
    ax.bar3d(xx, yy, 0, dx=1, dy=1, dz=zz, color=color)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

三维曲面图

# 绘制三维曲面图
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d
x, y = np.mgrid[-2:2:20j, -2:2:20j]
z = 50 * np.sin(x+y*2)
ax = plt.subplot(111, projection='3d')
ax.plot_surface(x,y,z,)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

子图

subplot()

# 绘制子图
import matplotlib.pyplot as plt
# 子图语法是plt.subplot(),下面表示绘制一个两行两列在一个表格位置绘制图形
plt.subplot(2, 2, 1)
plt.xticks([])
plt.yticks([])
# ha表示水平居中,va表示垂直居中
plt.text(0.5, 0.5, 'subplot(2, 2, 1)', ha='center', va='center', size=24, alpha=0.5)
plt.show()

subplots

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 300)
fig, (ax0, ax1) = plt.subplots(2, 1)
ax0.plot(x, np.sin(x), color='r')
ax0.set_title('subplot1')
plt.subplots_adjust(hspace=0.5)
ax1.plot(x, np.cos(x), color='g')
ax1.set_title('subplot2')
plt.show()

image-20200607174833350

axes()

image-20200607175436219

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最佳第六六六人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值