Python数据可视化

1、Matplotlib绘图 

1.1 matplotlib基本用法

状态接口

import pandas as pd
import matplotlib.pyplot as plt

x = [-3, 5, 7] #准备数据的x轴坐标
y = [10, 2, 5] #准备数据的y轴坐标

plt.figure(figsize=(15,3)) #figure 创建画布  figsize指定画布大小
plt.plot(x, y) #plot 绘图
plt.xlim(0, 10) #xlim 设置x轴坐标的范围
plt.ylim(-3, 8) #ylim 设置y轴坐标的范围
plt.xlabel('X Axis',size=20) # 设置x轴标签  size字体大小
plt.ylabel('Y axis') # 设置y轴标签
plt.title('Line Plot',size=30) # 设置标题内容, size 字体大小

面向对象

import pandas as pd
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(15,3))  #创建坐标轴对象
ax.plot(x, y) #调用坐标轴的绘图方法
ax.set_xlim(0, 10) # 调用坐标轴的设置x轴上下限的方法
ax.set_ylim(-3, 8) 
ax.set_xlabel('X axis') # 调用坐标轴的设置x轴标签的方法
ax.set_ylabel('Y axis',size = 20) # 调用坐标轴的设置y轴标签的方法
ax.set_title('Line Plot',size = 30) # 调用坐标轴的设置标题的方法

1.2 单变量频数统计直方图axes.hist()

# 直方图会将数据分组后绘制成图来显示变量的分布状况
fig=plt.figure()
axes1=fig.add_subplot(1,1,1)
axes1.hist(tips['total_bill'],bins=10)
axes1.set_title('Histogram of Total Bill')
axes1.set_xlabel('Frequency')
axes1.set_ylabel('Total Bill')

2、Pandas绘图 

2.1 bar柱状图

# 将所有的葡萄酒品牌按照产区分类,看看哪个产区的葡萄酒品种多:
# figsize 绘图区域大小, fontsize 字体大小 color 颜色
text_kwargs=dict(figsize=(16,8),fontsize=20,color=['b','orange','g','r','purple','brown','pink','gray','cyan','y'])
# 计算省份出现次数,取前10,画图;**text_kwargs表示解包
reviews['province'].value_counts().head(10).plot.bar(**text_kwargs)

2.2  line折线图

# 如果要绘制的数据不是类别值,而是连续值比较适合使用折线图
reviews['points'].value_counts().sort_index().plot.line()

 2.3 area面积图

# 面积图就是在折线图的基础上,把折线下面的面积填充颜色;当只有一个变量需要制图时,面积图和折线图之间差异不大,在这种情况下,折线图和面积图可以互相替
reviews['points'].value_counts().sort_index().plot.area()

 2.4 hist直方图

# price小于200的所有数据df,取price列的值,画图
reviews[reviews['price']<200]['price'].plot.hist()

2.5 pie饼图 

# 饼图
# 饼图也是一种常见的可视化形式
reviews['province'].value_counts().head(10).plot.pie()

2.6 scatter散点图

# 最简单的两个变量可视化图形是散点图,散点图中的一个点,可以表示两个变量
# 价格小于100的葡萄酒,随机取样100个数据,评分分布
reviews[reviews['price']<100].sample(100).plot.scatter(x='price',y='points')

2.7 hexbin蜂巢图

蜂巢格子颜色深度表示该范围内数据的条数

df.plot.hexbin(x='列名1', y='列名2', gridsize=15) # gridsize控制蜂巢格子的大小

2.8 bar(stacked=True)堆叠图

df.plot.bar(stacked=True)

2.9 barh水平柱状及堆叠图

df['列名'].barh() # 水平柱状
df.plot.barh(stacked=True) # 水平堆叠

3、Seaborn绘图

3.1 单变量

3.1.1直方密度频数图

ax = sns.distplot(df['列名']) # 直方加密度曲线
ax = sns.distplot(df['列名'], rug=True) # 直方加密度,再加频数线
ax = sns.distplot(df['列名'], kde=False) # 直方图
ax = sns.distplot(df['列名'], hist=False) # 密度曲线图

3.1.2 条形计数图

展示指定列中不同的值出现的次数

ax = sns.countplot(df['列名'])

3.2 双变量

3.2.1散点图与蜂巢图

ax = sns.regplot(x=df['列名1'], y=df['列名2'])
fig = sns.lmplot(x=df['列名1'], y=df['列名2'], fit_reg=True) # fit_reg=True表示展示拟合线
# jointplot在每个轴上创建包含单个变量直方图的散点图
ax = sns.jointplot(x=df['列名1'], y=df['列名2']) 
# 蜂巢图
ax = sns.jointplot(x=df['列名1'], y=df['列名2'], kind='hex')

 

3.2.2 2D密度(等高线)图

ax = sns.kdeplot(data=df['列名1'], data2=df['列名2'], shade=True, kind='kde') 
# shade=True是否填充轮廓
# kind='kde' 加上kde密度线

 3.2.3 条形图

ax = sns.barplot(x=df['列名1'], y=df['列名2']) 

3.2.4 箱线图

箱线图用于显示多种统计信息:最小值,1/4分位,中位数,3/4分位,最大值

ax = sns.boxplot(x=df['列名1'], y=df['列名2']) 

3.2.5 小提琴图

在箱线图的基础上能够显示数据量的多少

ax = sns.violinplot(x=df['列名1'], y=df['列名2']) 

3.2.6 成对关系图

能够将df中所有或指定的数值类型的列,成对的进行组合展示两者之间的关系

sns.pairplot(df) # 全部数值列进行两两组合
sns.pairplot(df, vars=['列名1', '列名2']) # 指定要组合展示的列名

自定义图表类型,按右上、左下、中间轴线(左上至右下)的方式分别设置

pair_grid = sns.PairGrid(df)
pair_grid.map_upper(sns.regplot) # 右上设为reg,并自动添加拟合回归线
pair_grid.map_lower(sns.kdeplot) # 左下设为kde密度图,散点会变成2D密度图
pair_grid.map_diag(sns.kdeplot) # 中间轴线上的图设为kde密度图,柱状图会变成一维的密度图
# 可以指定的图类型有:
#sns.histplot
#sns.barplot
#sns.jointplot 部分版本存在展示问题
#sns.kdeplot
#sns.regplot

3.3 特殊参数

多变量通过颜色、大小和形状区分

  • hue参数指定列,该列中不同的值即可展现出不同的颜色

  • size参数指定列,列中不同的值展现出不同大小

  • style参数指定列,列中不同的值展现出不同形状

ax = sns.violinplot(x=df['列名1'], y=df['列名2'], hue='列名3')
ax = sns.lmplot(x=df['列名1'], y=df['列名2'], fit_reg=True, hue='列名3') # fit_reg=True表示展示拟合线
ax = sns.pairplot(tips, hue='列名3')
ax.relplot(x="列名1", y="列名2", data=df, hue="列名3", style="列名4", size="列名5")

分图展示col与col_wrap参数

  • col参数指定列,根据该列中不同的值做分组,每组数据单独展示为一个图表

  • col_wrap参数指定每行多少个图表

sns.lmplot(x='列名1', y='列名2', data=df, fit_reg=False, col='列名3', col_wrap=3)
sns.relplot(x='列名1', y='列名2', data=df, hue='列名3', col='列名4', col_wrap=3)

fit_reg参数展示拟合线

ax = sns.lmplot(x=df['列名1'], y=df['列名2'], fit_reg=True, hue='列名3')

3.4 seaborn图表主题样式设置

import seaborn as sns # 导包
#使用subplots函数创建画布,并在其中添加子图
fig, ax = plt.subplots()
sns.set_style('darkgrid') # 黑色网格
sns.set_style('whitegrid') # 白色网格
sns.set_style('dark') # 黑色背景
sns.set_style('white') # 白色背景
ax.set_title('设置图标题并设置字体大小', size=10)
ax.set_xlabel('设置x轴名称并设置字体大小', size=10)
ax.set_ylabel('设置y轴名称并设置字体大小', size=10)
ax = sns.distplot(df['列名']) # 画图

4、Pyecharts绘图

4.1 柱状图代码模板实例

from pyecharts import options as opts
from pyecharts.charts import Bar
bar = (
    Bar() #创建柱状图
    .add_xaxis(city_job_top20.index.tolist()) #添加x轴数据,接收list列表类型的数据
    .add_yaxis('图例说明', df.values.tolist())#设定y轴图例,添加y轴数据,接收list列表类型的数据
    .set_global_opts( #设置全局参数
        title_opts=opts.TitleOpts(title='图表标题'), #设置标题
        datazoom_opts=opts.DataZoomOpts(),#添加缩放条
    )
)
# 在指定路径下生成指定名称的html文件
#bar.render('./bar.html')
# 在juypter notebook中显示
bar.render_notebook() 

 4.2 词云图代码模板示例

from pyecharts.charts import WordCloud
from pyecharts import options as opts
c = (
    WordCloud() #创建词云图对象
    .add(series_name='词云中每个词的提示标题', #添加标题
         data_pair=list(zip(df.index.tolist(), df.values.tolist())), 
         word_size_range=[6, 40])#指定文字大小,注意如果字体太大可能显示不全
    .set_global_opts(#设置全局参数 标题,字号
        title_opts=opts.TitleOpts(title='图表标题', 
                                  title_textstyle_opts=opts.TextStyleOpts(font_size=23))
    )
)
# 出图
c.render_notebook()

4.3  气泡图代码模板示例

from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

c = (
    Scatter() #创建散点图对象
    .add_xaxis(salary_data.salary_down.astype(int))#添加x周数据(薪资)
    .add_yaxis(
        "数据分析岗位数量", #图例说明
        [list(z) for z in zip(salary_data.job_count, salary_data.city)],#Y轴数据:岗位数量、城市
        label_opts=opts.LabelOpts(#Js代码控制气泡显示提示文字
            formatter=JsCode(
                "function(params){return params.value[2] + '岗位数量' + params.value[1] + '平均薪资' + params.value[0]}" #气泡提示
            ) # js代码中的params参数为 ==> (salary_down, job_count, city); 顺序是x轴的值(薪资),和y轴的值(岗位数, 城市)
        ),
    )
    .set_global_opts(#全局变量
        title_opts=opts.TitleOpts(title="数据分析就业岗位数量与平均起薪"),#设置标题
        tooltip_opts=opts.TooltipOpts(#Js代码控制气泡弹窗提示文字
            formatter=JsCode(
                "function (params) {return params.value[2]+ '平均薪资:'+params.value[0]}"
            )
        ),
        visualmap_opts=opts.VisualMapOpts(#控制
            type_="size", max_=1500, min_=200, dimension=1 # 控制条维度
        ),
        xaxis_opts=opts.AxisOpts(min_=4000, name='平均起薪'),#设置X轴起始值,X轴名字
        yaxis_opts=opts.AxisOpts(min_=300, max_=1800, name='岗位数量'),#设置Y轴起始值,Y轴名字
    )
)

c.render_notebook()

4.4 圆环图代码模板示例

from pyecharts.charts import Pie
from pyecharts import options as opts
from pyecharts.commons.utils import JsCode

c = (
    Pie()
    .add(
        series_name="经验要求",
        data_pair=[list(z) for z in zip(
            job['exp'].value_counts().index.tolist(),# 准备数据
            job['exp'].value_counts().values.tolist()
        )],
        radius=["40%", "70%"],#圆环图,内外径的半径大小
        label_opts=opts.LabelOpts(is_show=False, position="center"),
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title="数据分析工作经验要求"),
        legend_opts=opts.LegendOpts(pos_left="right", orient="vertical")) #设置图例位置
    .set_series_opts(
        tooltip_opts=opts.TooltipOpts(#鼠标滑过之后弹出文字格式
            trigger="item", # 固定参数
            formatter="{a}:{b};岗位数量:{c}(占比{d}%)" # a: series_name ; b: 1-3年 ; c: 岗位数量 ; d: 岗位数百分比的值
        ),
    )
)

c.render_notebook()

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值