Python数据可视化交互基本
2022/2/28 12:21:52
本文主要是介绍Python数据可视化交互基本,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Python数据可视化交互基本知识
- Python数据可视化交互基础
- 课前准备
- 1.折线图
- 绘制折线图 plt.plot()
- 折线图中的标题,横纵表,纵坐标
- 添加另一条曲线
- 折线命名
- 折现格式参数
- 网格线显示grid(True)
- 2.条形图
- 绘制条形图plt.bar()
- 随机生成折线图y轴数据
- 水平条形图绘制barh
- 数据水平翻转
- 3.直方图
- 直方图介绍以及适用环境
- 绘制直方图hist
- 直方图区间划分 bins
- 区间之间分割线 edgecolor
- 显示平均值的位置axvline
- 4.散点图
- 绘制散点图scatter
- 散点图“点”的参数设置
- 多点不同色
- 设置色卡colorbar
- 使用点的大小来表示数值的大小
- 一个图形中可以包含多组数据
- 5.饼图
- 绘制饼图pie
- 为每个扇形打上标签labels
- 为每个扇形打上占比autopct
- 将饼图顺时针排序
- 将个别扇形分离出来explode
- 6.热力图
- 热力图介绍
- 热力图的绘制imshow
- 加入x,y轴
- 数值大小色卡colorbar
- 为色块加上数值
- 常见问题
- 1.问题一 “get”属性缺失
- 2.问题二 “文字无法显示”
Python数据可视化交互基础
这章文章主要讲解到了:折线图、条形图、直方图、散点图、饼图、热力图
课前准备
安装matplotlib库,可以使用命令 pip install
然后应用matplotlib库
'''引用库''' from matplotlib import pyplot as plt
1.折线图
绘制折线图 plt.plot()
#首先引用库 from matplotlib import pyplot as plt #然后要有x,y的数据 dev_x = [1,2,3,4,5] dev_y = [20,40,60,80,100] #生成折线图plt.后缀就是决定是什么图 plt.plot(dev_x,dev_y) #显示所有图片 plt.show()
显示结果
折线图中的标题,横纵表,纵坐标
引用上面代码,做出演示
#首先引用库 from matplotlib import pyplot as plt #然后要有x,y的数据 dev_x = [1,2,3,4,5] dev_y = [25,48,69,87,100] #生成折线图plt.后缀就是决定是什么图 plt.plot(dev_x,dev_y) '''添加标题,横纵表,纵坐标''' #横坐标.xlabel plt.xlabel("天数") #纵坐标.ylabel plt.ylabel("完成度") #标题.title plt.title("下载完成效率图") #显示所有图片 plt.show()
添加另一条曲线
依旧是引用上面的代码
#首先引用库 from matplotlib import pyplot as plt #然后要有x,y的数据 dev_x = [1,2,3,4,5] dev_y = [20,45,62,85,100] #生成折线图plt.后缀就是决定是什么图 plt.plot(dev_x,dev_y) '''新增数据''' dev_x_1 = [1,2,3,4,5] dev_y_1 = [25,45,55,89,100] plt.plot(dev_x_1,dev_y_1) #添加标题,横纵表,纵坐标 #横坐标.xlabel plt.xlabel("天数") #纵坐标.ylabel plt.ylabel("完成度") #标题.title plt.title("下载完成效率图") #显示所有图片 plt.show()
代码简洁版
from matplotlib import pyplot as plt dev_x = [1,2,3,4,5] dev_y = [20,40,60,80,100] plt.plot(dev_x,dev_y) dev_x_1 = [1,2,3,4,5] dev_y_1 = [25,45,55,89,100] plt.plot(dev_x_1,dev_y_1) plt.xlabel("天数") plt.ylabel("完成度") plt.title("下载完成效率图") plt.show()
显示结果:
折线命名
通过legend函数为折线打上标签
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] dev_x = [1,2,3,4,5] dev_y = [20,40,60,80,100] plt.plot(dev_x,dev_y,label="迅雷")#label为折现命名,然调用legend函数时不需要命名 dev_x_1 = [1,2,3,4,5] dev_y_1 = [25,45,55,89,100] plt.plot(dev_x_1,dev_y_1,label="百度云盘") plt.xlabel("天数") plt.ylabel("完成度") plt.legend()#调用函数,参数在label已经输入 plt.title("下载完成效率图") plt.show()
折现格式参数
color | 指定图形的颜色 |
---|---|
marker | 指定每个数据点的标记 |
linestyle | 指定图形的形状 |
pyplot自带样式引用 | plt.style.use(‘自带样式名称’) |
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] dev_x = [1,2,3,4,5] dev_y = [20,40,60,80,100] plt.plot(dev_x,dev_y,label="迅雷",color="blue",marker=".",linestyle="-") dev_x_1 = [1,2,3,4,5] dev_y_1 = [25,45,55,89,100] plt.plot(dev_x_1,dev_y_1,label="百度云盘",color="red",marker=".",linestyle="--") plt.xlabel("天数") plt.ylabel("完成度") plt.legend() plt.title('下载效率图') plt.show()
网格线显示grid(True)
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] dev_x = [1,2,3,4,5] dev_y = [20,40,60,80,100] plt.plot(dev_x,dev_y,label="迅雷",color="blue",marker=".",linestyle="-") dev_x_1 = [1,2,3,4,5] dev_y_1 = [25,45,55,89,100] plt.plot(dev_x_1,dev_y_1,label="百度云盘",color="red",marker=".",linestyle="--") plt.xlabel("天数") plt.ylabel("完成度") plt.legend() plt.title('下载效率图') plt.grid(True) plt.show()
2.条形图
绘制条形图plt.bar()
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = ['小刘','小张','小王','小李','小刚','小三'] y_data = [3,4,2,3,5,5] plt.bar(x_data,y_data)#这个位置改动了 plt.title('工作表') plt.xlabel('员工姓名') plt.ylabel('工作天数') plt.show()
很多操作与折线图操作类似,这里就不做重复操作了
随机生成折线图y轴数据
#条形图bar from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] import numpy as np #导入包 # np.random.randint()区间之内的整数值 y_data = [np.random.randint(100) + i*20 for i in range(6)] x_data = range(6) x_c_data = ['小刘','小温','小罗','小张','小培','小林'] plt.title('员工入职图') plt.bar(x_data,y_data) #xitcks('参数','参数','属性') plt.xticks(x_data,x_c_data) plt.xlabel('姓名') plt.ylabel('工作天数') plt.show()
水平条形图绘制barh
将bar函数改为barh
import numpy as np from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java', 'Bash/Shell/PowerShell', 'C#', 'PHP', 'C++','TypeScript'] y_data = [59219, 55466, 47544, 36443, 35917, 27097, 23030, 20524, 18523, 18017] plt.barh(x_data, y_data) plt.title('编程语言流行度') plt.xlabel('编程语言') plt.ylabel('流行度') plt.tight_layout()#tight_layout会自动调整子图参数,使之填充整个图像区域 plt.show()
数据水平翻转
reverse()函数
import numpy as np from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = ['JavaScript', 'HTML/CSS', 'SQL', 'Python', 'Java', 'Bash/Shell/PowerShell', 'C#', 'PHP', 'C++','TypeScript'] y_data = [59219, 55466, 47544, 36443, 35917, 27097, 23030, 20524, 18523, 18017] #水平翻转操作 x_data.reverse() y_data.reverse() plt.barh(x_data, y_data) plt.title('编程语言流行度') plt.xlabel('编程语言') plt.ylabel('流行度') plt.tight_layout() plt.show()
3.直方图
直方图介绍以及适用环境
直方图介绍:
直方图,又称质量分布图,用于表示数据的分布情况,是一种常见的统计图表。一般用横轴表示数据区间,纵轴表示分布情况,柱子越高,则落在该区间的数量越大。直方图和条形图的外观相似。区别主要有以下几点:
- 条形图用条形的长度(横置时)或高度(纵置时)表示各类别频数的多少,其宽度(表示类别)则是固定的;直方图是用面积表示各组频数的多少,矩形的高度表示每一组的频数或频率,宽度则表示各组的组距,因此其高度与宽度均有意义。
- 由于分组数据具有连续性,直方图的各矩形通常是连续排列,而条形图则是分开排列。
- 条形图主要用于展示分类数据的大小,而直方图则主要用于展示数值型数据的分布。
直方图的适用环境:关系与数量之间的分布
绘制直方图hist
这里区间划分是自己明确指定划分区间范围
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = [1,2,3,4,5,6,7] y_data = [1,2,3,4,5,6,7] plt.hist(x_data,y_data) plt.show()
输出结果以及图像解释:
其中如果我们不想要某个区间的数据,可以直接去掉
直方图区间划分 bins
这里是bins根据区间划分的数量 自动划分
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = [1,2,3,4,5,6,7] plt.hist(x_data,bins=2)#将x轴应用区间划分,这里划分了两个区间 plt.show()
区间划分的格式是[1,2),[2,3),[3,4)依次这样的格式
区间之间分割线 edgecolor
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = [1,2,3,4,5,6,7] plt.hist(x_data,bins=2,edgecolor='red')#这个位置参数里面是颜色 plt.show()
显示平均值的位置axvline
平均值显示其他的图形也可以使用!!!
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] x_data = [1,2,3,4,5,6,7] plt.hist(x_data,bins=2,edgecolor='black')#这个位置参数里面是颜色 avg = 4#平均值变量 plt.axvline(avg,color='red',label='平均值')#平均值垂直线段引用 plt.legend() plt.show()
4.散点图
绘制散点图scatter
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('fivethirtyeight')#自带格式 x_data = [1,2,3,4,5] y_data = [10,25,15,30,5] plt.scatter(x_data,y_data)#这里变化scatter plt.title('商品单价数量') plt.xlabel('数量') plt.ylabel('金额') plt.tight_layout() plt.show()
散点图“点”的参数设置
属性 | 含义 |
---|---|
s | 点的大小 |
c | 点的颜色 |
marker | 点的形状 |
edgecolors | 点的边缘颜色 |
linewidth | 边缘线的粗细度 |
alpha | 透明度 |
'''在这串代码中设置''' plt.scatter(x_data,y_data,s=100, c='red', marker='*')
这是我设置的 自己可以根据需求设置
多点不同色
将参数c改为第二数据
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('fivethirtyeight') x_data = [1,2,3,4,5] y_data = [10,25,15,30,5] y_data_1 = [20,23,11,50,45] plt.scatter(x_data,y_data,s=100, c=y_data_1, marker='*')#将参数c设置成为y_data_1 plt.title('商品单价数量') plt.xlabel('数量') plt.ylabel('金额') plt.tight_layout() plt.show()
设置色卡colorbar
为了让图形传递信息更加的准确,添加一个色卡标明颜色深浅对应关系
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('fivethirtyeight') x_data = [1,2,3,4,5] y_data = [10,25,15,30,5] y_data_1 = [20,23,11,50,45] plt.scatter(x_data,y_data,s=100, c=y_data_1, marker='*') #色卡的添加 card = plt.colorbar() card.set_label('利润率') plt.title('商品单价数量') plt.xlabel('数量') plt.ylabel('金额') plt.tight_layout() plt.show()
使用点的大小来表示数值的大小
from matplotlib import pyplot as plt import numpy as np#引用numpy这个包 import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('fivethirtyeight') #将数据np.array() x_data = np.array([1,2,3,4,5]) y_data = np.array([10,25,15,30,5]) y_data_1 = np.array([20,23,11,50,45]) #将s参数改为y_data_1*10 plt.scatter(x_data,y_data,s=y_data_1*10, c=y_data_1, marker='*') card = plt.colorbar() card.set_label('利润率') plt.title('商品单价数量') plt.xlabel('数量') plt.ylabel('金额') plt.tight_layout() plt.show()
一个图形中可以包含多组数据
from matplotlib import pyplot as plt import numpy as np import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] plt.style.use('fivethirtyeight') #数据1 x_data = np.array([1,2,3,4,5]) y_data = np.array([10,25,15,30,5]) y_data_1 = np.array([20,23,11,50,45]) plt.scatter(x_data,y_data,s=y_data_1*10, c=y_data_1, marker='*',label='数据1') #数据2 data_2 = np.array([1.5,2.1,3,4,6.5]) data_2_x = np.array([19,29,39,49,59]) data_2_y = np.array([15,25,35,45,55]) plt.scatter(data_2,data_2_x,s=data_2_y*10,c=data_2_y,marker='v',label='数据2') #色卡 card = plt.colorbar() card.set_label('利润率') plt.legend() plt.title('商品单价数量') plt.xlabel('数量') plt.ylabel('金额') plt.tight_layout() plt.show()
5.饼图
绘制饼图pie
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] #数据《王者荣耀》英雄出场率 hero_data = ['孙悟空','孙尚香','诸葛亮','盾山','澜'] hero_odds = [20,21,29,15,15] plt.pie(hero_odds)#使用pie plt.tight_layout() plt.show()
为每个扇形打上标签labels
'''在pie中的加上labels=“名字列表”''' plt.pie(hero_odds,labels=hero_data)
得到:
为每个扇形打上占比autopct
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] #数据《王者荣耀》英雄出场率 hero_data = ['孙悟空','孙尚香','诸葛亮','盾山','澜'] hero_odds = [20,21,29,15,15] ''' 加上autopct="%1.1f%%" ''' plt.pie(hero_odds,labels=hero_data,autopct='%1.1f%%') plt.tight_layout() plt.show()
将饼图顺时针排序
参数 | 含义 |
---|---|
counterclock | 饼图旋转方向 顺时针(False)逆时针(True) |
startangle | 扇形放角度 |
from matplotlib import pyplot as plt import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] #数据《王者荣耀》英雄出场率 hero_data = ['孙悟空','孙尚香','诸葛亮','盾山','澜'] hero_odds = [20,21,29,15,15] #这个位置添加参数!!! plt.pie(hero_odds,labels=hero_data,autopct='%1.1f%%',counterclock=False, startangle=90) plt.title('英雄登场率') plt.tight_layout() plt.show()
将个别扇形分离出来explode
plt.pie(hero_odds,labels=hero_data,autopct='%1.1f%%',counterclock=False, startangle=90,explode=[0.1,0,0,0,0])
6.热力图
热力图介绍
1、表格形热力图,也称色块图(2个分类字段和1个数值字段,分类字段来确定x,y轴)
2、非表格型热力图(3个数值字段,2个数值字段分别确定x,y轴,1个数值数值字段确定着色)
热力图适合查看总体情况、发现异常值、显示多个变量之间的差异,以及查看它们之间的相关性
热力图的绘制imshow
将一个二维数组传入imshow就可以绘制一个热力图
from matplotlib import pyplot as plt import numpy as np import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.imshow(harvest)#热力图imshow plt.tight_layout() plt.show()
加入x,y轴
from matplotlib import pyplot as plt import numpy as np import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] harvest_x = ['成都','甘肃','泸州','阿坝','西昌','乐山','眉山'] harvest_y = ['平原','山脉','高原','丘陵','盆地','山脊','林原'] harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) '''这个地方加入x,y''' plt.xticks(np.arange(len(harvest_x)), labels=harvest_x, rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(harvest_y)), labels=harvest_y) plt.imshow(harvest) plt.title('地热散布分析') plt.tight_layout() plt.show()
参数 | 详情 |
---|---|
rotation | 文字旋转度数 |
rotation_mode | 旋转模式 |
ha | 旋转方向 |
数值大小色卡colorbar
from matplotlib import pyplot as plt import numpy as np import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] harvest_x = ['成都','甘肃','泸州','阿坝','西昌','乐山','眉山'] harvest_y = ['平原','山脉','高原','丘陵','盆地','山脊','林原'] harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.xticks(np.arange(len(harvest_x)), labels=harvest_x, rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(harvest_y)), labels=harvest_y) plt.imshow(harvest) plt.colorbar()#在代码中加入colorbar就行了 plt.title('地热散布分析') plt.tight_layout() plt.show()
为色块加上数值
from matplotlib import pyplot as plt import numpy as np import pylab as mp1 mp1.rcParams['font.sans-serif'] = ['SimHei'] harvest_x = ['成都','甘肃','泸州','阿坝','西昌','乐山','眉山'] harvest_y = ['平原','山脉','高原','丘陵','盆地','山脊','林原'] harvest = np.array([[0.8, 2.4, 2.5, 3.9, 0.0, 4.0, 0.0], [2.4, 0.0, 4.0, 1.0, 2.7, 0.0, 0.0], [1.1, 2.4, 0.8, 4.3, 1.9, 4.4, 0.0], [0.6, 0.0, 0.3, 0.0, 3.1, 0.0, 0.0], [0.7, 1.7, 0.6, 2.6, 2.2, 6.2, 0.0], [1.3, 1.2, 0.0, 0.0, 0.0, 3.2, 5.1], [0.1, 2.0, 0.0, 1.4, 0.0, 1.9, 6.3]]) plt.xticks(np.arange(len(harvest_x)), labels=harvest_x, rotation=45, rotation_mode="anchor", ha="right") plt.yticks(np.arange(len(harvest_y)), labels=harvest_y) '''加上块中的数值''' for i in range(len(harvest_x)): for j in range(len(harvest_y)): text = plt.text(j, i, harvest[i, j], ha="center", va="center", color="w") plt.imshow(harvest) plt.colorbar() plt.title('地热散布分析') plt.tight_layout() plt.show()
常见问题
1.问题一 “get”属性缺失
AttributeError: module ‘requests’ has no attribute ‘get’”,python中”requests模块“get”属性缺失“的错误该如何解决? | |
---|---|
解决方法:
检查是不是自己写的代码文件命名为requests.py如果是的话,修改文件名,即可。 | |
---|---|
2.问题二 “文字无法显示”
解决方法:
在代码中加入
import pylab as mp1#文字问题使用 mp1.rcParams['font.sans-serif'] = ['SimHei']#文字问题使用
@想努力学习变强的尾巴
欢迎各位在评论区讨论留言,遇到问题一起解决!
这篇关于Python数据可视化交互基本的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01Python编程基础知识
- 2024-11-01Python编程基础
- 2024-10-31Python基础入门:理解变量与数据类型
- 2024-10-30Python股票自动化交易资料详解与实战指南
- 2024-10-30Python入行:新手必读的Python编程入门指南
- 2024-10-30Python入行:初学者必备的编程指南
- 2024-10-30Python编程入门指南
- 2024-10-30Python量化交易学习:新手入门指南
- 2024-10-30Python股票自动化交易实战入门教程
- 2024-10-29Python股票自动化交易教程:新手入门指南