当前位置: 首页 > news >正文

python全栈-数据可视化

python全栈-数据可视化

文章目录

  • Matplotlib
    • 实操1 根据三组数据,画到一个条形图里面
  • Seaborn
  • pyecharts
    • 词云图wordcloud
    • 雷达图 Rader
  • 地图 Map
  • 坐标+地图geo
  • 组合图 overlap
  • 时间坐标图timeline

Matplotlib

方法名说明
title()设置图表的名称
xlabel()设置x轴名称
ylabel()设置y轴名称
xticks(x,ticks,rotation)设置x轴的刻度 rotation旋转角度
yticks()设置y轴的刻度
plot()绘制线性图表
show()显示图表
legend()显示图例
text(x,y,text)显示每条数据的值 x,y值的位置
figure(name,figsize=(w,h),dpi=n)设置图片大小
  • 直线 plt.plot([0,2],[1,4])

  • 折线

    • x=[1,2,3,4,5]
      squares=[1,4,9,16,25]
      plt.plot(x,squares)
      
  • 标签文字和线条粗细

    • plt.plot(datas,squares,linewidth=5) linewidth折线的粗细
    • plt.title(‘Numbers’,fontsize=24) fontsize文字字号
  • 设置中文标题

    • plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
  • 查看matplotlib有哪些风格 print(plt.style.available)

  • 设置风格 plt.style.use(‘ggplot’) 必须在绘图之前设置

  • 显示图例

    • plt.legend(loc=2) loc是图例在图片上的位置,在官网上有对应的数字
    • plt.plot(x, max_temperature, label=‘最高温’) label是线在图例的名称
  • 双折线

    • 使用两次 plt.plot()

    • plt.plot(x, max_temperature, label='最高温')
      plt.plot(x, min_temperature, label='最低温')
      
  • 保存图片 plt.savefig(‘result.jpg’) 需要在plt.plot(x,y)绘图之后

    • 如果直接写成 plt.savefig(‘cos’) 会生成cos.png
  • 绘制曲线 还是使用plot方法,数据量越大越好

  • 在获取数值的时候,使用Numpy模块快速生成

    • 生成x的坐标(0到10的100个等差数列的数) x=np.linspace(0,10,100)
    • 正弦曲线 sin_y=np.sin(x) plt.plot(x,sin_y)
    • 余弦曲线 cos_y=np.cos(x) plt.plot(x,cos_y)
  • 画布分区

    • subplot分区
      • plt.subplot(x,y,n) x行y列,n是选中第一个作为下一次绘制的位置
      • 将画布分为2行2列,将图画到画布的1区域 plt.subplot(2,2,1) 简写 plt.subplot(221)
    • subplots分区
      • fig,ax=plt.subplots(nrows=2,ncols=2) 参数是行数和列数
      • ax[0][1].plot(x,np.sin(x)) ax是二维数组,指定绘图位置
      • fig是把画布的内容保存为图片
  • 散点图

    • plt.scatter(x,y) 传入xy坐标即可

    • import matplotlib.pyplot as plt
      import numpy as np
      # 绘制不同大小不同颜色的散点图
      np.random.seed(0)
      x=np.random.rand(100)
      y=np.random.rand(100)
      colors=np.random.rand(100)
      size=np.random.rand(100)*1000
      plt.scatter(x,y,c=colors,s=size,alpha=0.7)
      plt.show()
      
      • plt.scatter(x,y,c=colors,s=size,alpha=0.7)
      • c是指定每个点颜色
      • s是指定每个点的大小
      • alpha是点的透明度,有透明度可以看到相邻两个点的互相遮盖情况 1是不透明
    • plt.plot(x,y,‘o’) 给plot第三个参数赋值字母o,就是散点图

  • 不同种类不同颜色的线

    作为线性图的替代,可以通过向 plot() 函数添加格式字符串来显示离散值

    • plt.plot(x,x,‘–c’) #虚线 浅蓝色
字符描述
‘-’实线样式
‘–’短横线样式
‘-.’点划线样式
‘:’虚线样式
‘.’点标记
‘,’像素标记
‘o’圆标记
‘v’倒三角标记
‘^’正三角标记
‘1’下箭头标记
‘2’上箭头标记
‘3’左箭头标记
‘4’右箭头标记
‘s’正方形标记
‘p’五边形标记
‘*’星形标记
‘h’六边形标记 1
‘H’六边形标记 2
‘+’加号标记
‘x’X 标记
‘D’菱形标记
‘d’窄菱形标记
‘_’水平线标记
  • 颜色的缩写
字符颜色
‘b’蓝色
‘g’绿色
‘r’红色
‘c’青色
‘m’品红色
‘k’黑色
‘w’白色
  • 条形图

    • bar(x,y,color,width) 函数来生成纵向条形图
    • barh(x,y,color,height) 函数来生成条形图
    • bar函数的宽度并不是像素宽度。bar函数会根据二维坐标系的尺寸,以及x坐标值的多少,自动确定每一个柱的宽度,而width指定的宽度就是这个标准柱宽度的倍数。该参数值可以是浮点数,如0.5,表示柱的宽度是标准宽度的0.5倍。
    • color参数可以省略
  • 对部分条形图,使用颜色区分

    • v_bar=plt.bar(x,y,color=‘lightblue’) plt.bar会返回每一个柱的值

    • for bar,height in zip(v_bar,y):if height<0:bar.set(color='lightgreen',linewidth='3')
      
    • 使用zip遍历 柱和高度y,并使用y作为判断依据,给柱设置颜色bar.set()

  • 带方差的条形图 就是顶部中间有一个直线,代表方差/波动

    • ax.bar(x,y,yerr=variance,alpha=0.3) yerr代表上下浮动值
    • ylim 方法用于设置y轴的显示范围,控制图表中y轴的最小值和最大值。
  • fill_between的使用

    • x=np.linspace(0,10,200)
      y1=2*x+1
      y2=3*x+1.5
      fig,ax=plt.subplots()
      ax.fill_between(x,y1,y2,color='red')
      
    • 就是在两个y值之间填补颜色

实操1 根据三组数据,画到一个条形图里面

import matplotlib.pyplot as pltreal_names=['电影1','电影2','电影3']
real_num1=[5453,7548,6543]
real_num2=[1840,4013,3421]
real_num3=[1080,1673,2342]width=0.3
x=range(len(real_names))x_label = [f'星期{i+1}' for i in x]plt.rcParams['font.sans-serif']=['SimHei']
plt.xticks([i+width for i in x],x_label)
plt.title('3天的票房数')
plt.bar(x,real_num1,color='g',width=width,label='电影一')
plt.bar([i+width for i in x],real_num2,color='b',width=width,label='电影二')
plt.bar([i+(2*width) for i in x],real_num3,color='r',width=width,label='电影三')
plt.legend(loc=1)
plt.show()

请添加图片描述

  • 在条形图的每一个柱上面显示具体数据
    • 使用plt.text方法,提供x和y坐标,然后给一个要填写的内容
x=range(1,4)
y = [2,3,4]
plt.bar(x,y)
for a,b in zip(x,y):plt.text(a,b,b)

改良版的实操1

import matplotlib.pyplot as pltreal_names=['电影1','电影2','电影3']
real_num1=[5453,7548,6543]
real_num2=[1840,4013,3421]
real_num3=[1080,1673,2342]
width=0.3
x=range(len(real_names))x_label = [f'星期{i+1}' for i in x]plt.rcParams['font.sans-serif']=['SimHei']
plt.xticks([i+width for i in x],x_label)
plt.title('3天的票房数')
plt.bar(x,real_num1,color='g',width=width,label='电影一')
plt.bar([i+width for i in x],real_num2,color='b',width=width,label='电影二')
plt.bar([i+(2*width) for i in x],real_num3,color='r',width=width,label='电影三')
plt.legend(loc=1)
# 给条形图加具体数值
for i,j in enumerate(real_num1):plt.text(x[i]-0.1,real_num1[i]*1.01,j)   # 注意计算的坐标
for i,j in enumerate(real_num2):plt.text([i+width for i in x][i]-0.1,real_num2[i]*1.01,j)
for i,j in enumerate(real_num3):plt.text([i+(2*width) for i in x][i]-0.1,real_num3[i]*1.01,j)
plt.show()

enumerate方法是给两个返回值,第一个是序号,第二个是具体内容

  • 饼图 pie()

    • 参数

    • paches,texts,autotexts=plt.pie([a,b],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')

      • autopct='%0.1f%%'控制精度
      • labels 传入饼图每一块的名称
      • colors 指定每一块的颜色
      • explode=分裂距离 相邻两块之间的间隙
    • 返回值

      • paches

      • texts 遍历这个变量修改的是标签,是饼图外面对应每一块的那个字体的属性 和autotexts 一样

      • autotexts 遍历这个变量,然后使用set_color方法设置字体颜色,set_fontsize设置字体大小

        • #设置饼状图中的字体颜色
          for text in autotexts:text.set_color('white')text.set_fontsize(20)
          
  • 直方图 hist(data,bins,normed)

    • data 所有的数据
    • bins 分几组
    • normed y轴是否显示成百分比
    • 就是把所有的数据data直接给hist方法,然后使用bins指定分成几组,比如100个随机数,分成10组,就是bins=10.

Seaborn

是matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易。

应该把 Seaborn 视为 matplotlib 的补充,而不是替代物

  • 直线
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
plt.plot([1,5,10],[1,3,5])
plt.show()
  • Seaborn 支持的风格有5种:

    • darkgrid 黑背景-白格
    • whitegrid 白背景-白格
    • dark 黑背景
    • white 白背景
    • ticks
  • 设置风格的方法:

    • set(style=‘’) sns.set(style=‘dark’)
    • set_style(value) 统一设置 sns.set_style(‘ticks’)
    • axes_style(value) 单一设置 with sns.axes_style(‘darkgrid’):
  • 移除轴脊柱

    • 就是绘图的时候,那个框架,最外边那个框,可以移除
    • matplotlib 参数是做不到这一点的,但是你可以使用 seaborn 的despine() 方法来移除它们
    • 移除轴脊柱要在 填充数据之后,在显示图表之前
  • 图像风格 set_context()

    • 标签的大小,线条和绘图的其他元素,但不会影响整体样式
    • 四个预设是 paper ,notebook ,talk ,poster 。该 notebook 样式是默认的
    • sns.set_context(‘notebook’)
    • sns.set_context(rc={“lines.linewidth”:5}) 线条粗细
    • sns.set_context(rc={“xtick.labelsize”:20}) x 轴刻度字号
  • 直方图 distplot

    • sns.distplot(x,bins=20, kde=False) bins是分几组,kde是数据分布曲线,默认是False
  • 条形图 barplot

  • 加载数据 就是读文件 titanic = sns.load_dataset('titanic')

    • 读的是csv文件,不用写后缀
    • 读完文件之后可以直接绘图,可以自动识别x轴标签,坐标等等各种数据都可以
    • sns.barplot(x=‘sex’, y=‘survived’,data=titanic, hue=‘class’) 绘制条形图
  • 盒图 boxplot

    • 盒图也叫盒须图或者箱图。用于表示分布状态
    • sns.boxplot(x=‘day’, y=‘total_bill’,data=tips, hue=‘time’)
  • 小提琴图 是箱图和密度图的一种结合图形

    • sns.violinplot(x=‘day’, y=‘total_bill’,data=tips, hue=‘sex’)
  • 分布散点图 stripplot

    • sns.stripplot(x=‘day’, y=‘total_bill’,data=tips, jitter=True)
    • jitter默认也是True,会把点集中到一条线上
  • 分簇散点图 swarmplot

    • sns.swarmplot(x=‘day’, y=‘total_bill’,data=tips,hue=‘sex’) 可以使用hue分组
    • color=‘k’ 可以指定颜色
    • alpha=1.0 透明度也可以使用
  • 散点图 scatterplot

    • sns.scatterplot(y=‘tip’,x=‘total_bill’,data=tips)
  • 双轴密度图 kdeplot

    • sns.kdeplot(x=‘x’,y=‘y’,data=df)
    • 参数shade=True 可以上色,不上色就是等高线的效果,只有线
  • 联合图 jointplot 就是两种图的结合版,看起来很牛逼

    • sns.jointplot(x=‘x’, y=‘y’,data=df)
  • 点图 pointplot 和折线图类似,花里胡哨的

    • sns.pointplot(x=‘sex’, y=‘survived’,data=titanic, hue=‘class’)
  • 热力图 heatmap

    • 热力图(heatmap)是以矩阵的形式表示

    • 数据值在图形中以颜色的深浅来表示数量的多少

    • 并可以快速到到大值的与最小值所在位置

    • 在机器学习的分类中经常用来作混淆矩阵的比较。

    • sns.heatmap(uniform_data)

    • 设置参数vmin vmax的值,这样大于vmax值得就变成同一个颜色,就是这两个参数之间的数据会有色差表示。超过两端的数据用统一颜色表示

    • 参数 annot=True 在图上写上值,但是看不清

      • 再加上fmt=d 以整数的形式写上去
    • linewidths=0.5 将每个格子之间留有缝隙

    • cbar=False 将右边的图例去掉

    • 修改色系cmap=‘YIGnBu’ 就是颜色类型

  • 散布图矩阵 pairplot

    • 会同时绘制数据中所有特征两两之间的关系图。
    • 对角线是直方图,其余地方是散点图
    • 参数
      • kind参数设置对角线之外的图形 hist kde rge
        • kde把散点图变成双轴密度图,就是那个有颜色的等高线图
        • hist是一种散点图,但是以像素的形式表示,就跟我的世界画风一样
        • rge 就是在散点图的基础上加了一条直接,就是数据模拟的那个直线
  • 线型图 lineplot

    • 就是把变化大的地方取平均值,连成一条线。为了看出变化的范围有浅浅的背景进行表示
  • 回归分析图 就是根据散点图找到回归线

    • 线性回归图通过大量数据找到模型拟合线性回归线。就是高中做题的时候,经常画的线,根据点图画线。
    • sns.lmplot() 功能多,规范多
    • sns.regplot() 推荐,支持的参数与数据类型比较多一些
    • 这俩方法都可以绘制同样效果的图
  • 网格图

    • catplot() 分类图,可通过指定kind参数来绘制其它图形,如散点图,箱图、小提琴图等

      • 就是之前绘图有分组,但是在同一个图上展示,现在可以把每一组独立成另一张图
      • sns.catplot(x=‘total_bill’,y=‘tip’,data=tips,hue=‘time’,col=‘sex’) 意思是以列的形式,按性别分组,还可以使用row参数再次分组
    • FacetGrid()

      • 常用参数:
      • height 高
      • aspect 宽
      • palette 色板,就是点的颜色,按照分类上色
      • col 分图属性(列)
      • row 分图属性(行)
      • hue 属性分类
      • margin_titles
      • size 图的大小,已被height 替代
      • row_order 显示分图的数据
      • hue_kws 显示图标记的形状(散点) 三角啊啥的
      • s 点的大小
      • linewidth 点的边框粗细
      • wspace hspace 相邻两图之间的距离

pyecharts

有良好的交互性 最受欢迎

from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeTypebar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.LIGHT))  # 修改主题.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]) # x轴数据.add_yaxis("商家 A", [5, 20, 36, 10, 75, 90])   # y轴数据.set_global_opts(title_opts=opts.TitleOpts(title='标题'))  # 标题
)
bar.render()

使用 options 配置项,在 pyecharts 中,一切皆 Options。

导入pyecharts里面的faker模块,可以自动生成数据方便对图表进行练习

  • TitleOpts:标题配置项
  • AxisOpts:坐标轴配置项
  • AxisLineOpts: 坐标轴轴线配置项
  • AxisTickOpts: 坐标轴刻度配置项
  • AxisPointerOpts: 坐标轴指示器配置项
  • InitOpts:初始化配置项
  • AnimationOpts:Echarts 画图动画配置项
  • TooltipOpts:提示框配置项
  • ItemStyleOpts:图元样式配置项
  • LabelOpts:标签配置项

词云图wordcloud

使用add方法添加数据,数据的格式是序列(字符串+权重),需要有多个这样的序列

参数shape设置词云图的轮廓

def add(# 系列名称,用于 tooltip 的显示,legend 的图例筛选。series_name: str,# 系列数据项,[(word1, count1), (word2, count2)]data_pair: Sequence, # 词 云 图 轮 廓 , 有 'circle', 'cardioid', 'diamond', 'triangle-forward', 'triangle', 'pentagon', 'star' 可选shape: str = "circle", # 自定义的图片(目前支持 jpg, jpeg, png, ico 的格式,其他的图片格式待测试)# 该参数支持:# 1、 base64 (需要补充 data 头);# 2、本地文件路径(相对或者绝对路径都可以)# 注:如果使用了 mask_image 之后第一次渲染会出现空白的情况,再刷新一次就可以了(Echarts 的问题)# Echarts Issue: https://github.com/ecomfe/echarts-wordcloud/issues/74mask_image: types.Optional[str] = None, # 单词间隔word_gap: Numeric = 20, # 单词字体大小范围word_size_range=None,# 旋转单词角度rotate_step: Numeric = 45, # 距离左侧的距离pos_left: types.Optional[str] = None, # 距离顶部的距离pos_top: types.Optional[str] = None, # 距离右侧的距离pos_right: types.Optional[str] = None, # 距离底部的距离pos_bottom: types.Optional[str] = None, # 词云图的宽度width: types.Optional[str] = None, # 词云图的高度height: types.Optional[str] = None, # 允许词云图的数据展示在画布范围之外is_draw_out_of_bound: bool = False, # 提示框组件配置项,参考 `series_options.TooltipOpts` tooltip_opts: Union[opts.TooltipOpts, dict, None] = None, # 词云图文字的配置textstyle_opts: types.TextStyle = None, # 词云图文字阴影的范围emphasis_shadow_blur: types.Optional[types.Numeric] = None, # 词云图文字阴影的颜色emphasis_shadow_color: types.Optional[str] = None, 
)

雷达图 Rader

就是那种所谓的五边形战士,六边形战士那种效果图

首先是设置每一个角的名称和最大值,然后导入数据,给一个列表,对应每一条边的值

地图 Map

默认是中国地图,以省为界限划分板块,导入数据的方式就是[省名,数值]的方式

还可以以市为界限划分,由于默认显示名称,市的界限太小,字就很密集,可以设置参数只有鼠标移上去的时候,才显示名称

也可以修改参数,切换到某一个省,以市为界限划分,以市名和数值填充

坐标+地图geo

就是动态的地图,给地图上加上点,也就是坐标,这个点可以设置成动态效果

还可以模拟飞行路线,输出出发地和目的地,就能生成一个向量的轨迹图,修改参数使线弯曲,再加上别的图片,就是动态轨迹图了

组合图 overlap

直接绘制两个图,然后‘bar.overlap(line)’ 使用overlap这个方法,就可以把两个图合并显示在一个图上

时间坐标图timeline

就是那种汇报图,一年一个图,有很多年的时候,可以合并显示,下面一个时间坐标轴,点击哪一年就显示哪一年,也可以循环播放,自动切换等等

创建一个timeline对象之后,再创建其他图,折线图等等,然后添加到timeline对象,就可以实现了

http://www.dtcms.com/a/395227.html

相关文章:

  • 【国产桌面操作系统】安装mysql客户端及C/C++开发
  • IntelliJ:找不到相关的 gradle 配置,请重新导入 Gradle 项目,然后重试。
  • 云计算微服务架构与容器化技术:服务网格与边缘计算融合实践
  • 飞牛NAS上搭建OpenWrt旁路由教程(适用于x86的Docker部署)
  • python14——函数
  • 14.Linux 硬盘分区管理及RAID存储技术
  • ★ Linux ★ 信号
  • macOS在IDEA里滚动行为混乱问题
  • ✨Vue 静态路由详解:构建应用的导航骨架(4)
  • 08-2Dcss动画
  • 使用IOT-Tree消息流Modbus Slave节点,实现Modbus设备的模拟
  • 创作者模式—单例设计模式
  • PostgreSQL 备份
  • SQL-多表查询
  • Hive SQL 中的时间戳转换详解
  • Linux笔记---select、poll、epoll总结对比
  • MySQL查询详细介绍
  • 面试题二:业务篇
  • Rust进阶-part8-迭代器
  • halcon3d gen_image_to_world_plan3_map与project_3d_point
  • Ellisys工具
  • Qwen3-7B-Instruct Windows LMStudio 部署
  • 【代码】关于C#支持文件和文本框的简单日志实现
  • atcoder经典好题
  • 【Linux】Linux文件系统详解:从磁盘到文件的奥秘
  • 【Android Keystore】Android 密钥库系统使用指南
  • RBAC权限模型实战图解:绘制企业权限矩阵,告别混乱授权
  • 【ROS2】通讯协议接口 Interface
  • Spring —— 事务控制
  • 基于vue开发的背单词网站