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) 参数是行数和列数
      • ax01.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对象,就可以实现了

相关推荐
固定资产管理系统软件25 分钟前
商务局RFID固定资产管理系统的应用价值与落地要点解析
大数据·python
码农颜1 小时前
6.3 主函数流程剖析
开发语言·php
TheBestRucy1 小时前
Python 九阳神功:从零筑基到线程飞升
服务器·开发语言·网络·人工智能·python
研☆香1 小时前
聊一聊前端的常见字 关键字
开发语言·前端·javascript
lancyu1 小时前
关于多轮对话机器人的上下文Token优化和解决方案
人工智能·python·深度学习·机器学习·chatgpt·机器人·prompt
草莓橙子碗2 小时前
Claude 使用指南
开发语言·python
工具分享2 小时前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI2 小时前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
老郑聊AI业财智造2 小时前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
longxiaozhang62 小时前
C# Array类:数组其实没那么难
开发语言·c#