python全栈-数据可视化

python全栈-数据可视化

文章目录

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])

  • 折线

    py 复制代码
    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()

    py 复制代码
    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坐标即可

    py 复制代码
    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会返回每一个柱的值

    py 复制代码
    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的使用

    py 复制代码
    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 根据三组数据,画到一个条形图里面

py 复制代码
import matplotlib.pyplot as plt

real_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坐标,然后给一个要填写的内容
py 复制代码
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

py 复制代码
import matplotlib.pyplot as plt

real_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设置字体大小

        py 复制代码
        #设置饼状图中的字体颜色
        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 的补充,而不是替代物

  • 直线
py 复制代码
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

有良好的交互性 最受欢迎

py 复制代码
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType

bar = (
    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设置词云图的轮廓

py 复制代码
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/74
    mask_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对象,就可以实现了

相关推荐
Q_Q5110082852 小时前
python+nodejs+springboot在线车辆租赁信息管理信息可视化系统
spring boot·python·信息可视化·django·flask·node.js·php
@大迁世界2 小时前
JavaScript 2.0?当 Bun、Deno 与 Edge 运行时重写执行范式
开发语言·前端·javascript·ecmascript
站大爷IP2 小时前
Python条件控制:让程序学会"思考"的魔法
python
站大爷IP2 小时前
5分钟学会用Python爬取知乎热榜:从零开始的实战指南
python
zhurui_xiaozhuzaizai3 小时前
大模型里使用的pytorch dataset 和dataloader详细解析和介绍
人工智能·pytorch·python
大飞pkz3 小时前
【设计模式】适配器模式
开发语言·设计模式·c#·适配器模式
大飞pkz3 小时前
【设计模式】外观模式
开发语言·设计模式·c#·外观模式
databook3 小时前
Manim实现气泡特效
后端·python·动效
计算机毕设残哥3 小时前
【Spark+Hive+hadoop】人类健康生活方式数据分析
大数据·hive·hadoop·python·数据分析·spark·dash