[学习笔记 Day09]数据分析与应用:数据可视化

数据可视化是指将数据以图形、图像和图表的形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程。

使用 Matplotlib 绘图

Matplotlib 是一个功能强大的绘图库,它里面的 pyplot 模块中封装了一系列用于绘制图表、添加和设置辅助元素的函数,可以帮助用户轻松地将数据转换为想要的图表。

import matplotlib.pyplot as plt
  • plt.title(text):设置图表标题
  • plt.xlabel(text):设置 x 轴的标题
  • plt.ylabel(text):设置 y 轴的标题
  • plt.rcParams['font.sans-serif'] = ['字体名']:设置字体样式
  • plt.text(x ,y ,text ,ha ,va ,fontsize):设置柱体的数据内容
    • x:水平方向的位置
    • y:垂直方向的位置
    • ha:水平方向(居中?左对齐?右对齐?)
    • va:垂直方向(居中?上对齐?下对齐?)
  • plt.legend(handles ,labels):设置图例
    • handles:显示的图例(数组)
    • labels:根据柱体设置的柱体类别(数组)

折线图

  • plt.plot(x ,y ,marker ,ms)
    • x:x 轴数据(数组类型)
    • y:y 轴数据(数组类型)
    • marker:数据点样式
      • o:圆点
      • *:星型
    • ms:数据点的大小

如果希望在一张图上绘制两段折线,可以多次调用 plot() 函数绘制

x = np.arange(1,16)
y = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])

# 根据一组数据绘制折线图
plt.plot(x,y)
plt.show()
图片[1]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
x = np.arange(1,16)
y = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
x1=np.arange(1,16)
y1=np.array([13,23,44,34,23,31,35,22,15,34,46,53,13,34,42])

# 根据两组数据绘制折线图
plt.plot(x1,y1)
plt.plot(x,y)
plt.show()
图片[2]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
x = np.arange(1,16)
y = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
x1=np.arange(1,16)
y1=np.array([13,23,44,34,23,31,35,22,15,34,46,53,13,34,42])

# 根据两组数据绘制折线图
# 数据标记点为圆形,大小为6像素
plt.plot(x1,y1,marker='o',ms=6)
# 数据标记点为星型,大小为8像素
plt.plot(x,y,marker='*',ms=8)
plt.show()
图片[3]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
x = np.arange(1,16)
y = np.array([32,33,34,34,33,31,30,29,30,29,26,23,21,25,31])
x1=np.arange(1,16)
y1=np.array([13,23,44,34,23,31,35,22,15,34,46,53,13,34,42])

# 根据两组数据绘制折线图
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
plt.plot(x1,y1,marker='o',ms=6)
plt.plot(x,y,marker='*',ms=8)
plt.show()
图片[4]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

柱形图

  • plt.bar(x ,y ,tick_label ,width)
    • x:x 轴数据(数组类型)
    • y:y 轴数据(数组类型)
    • tick_label:x 轴对应柱体的别名
    • width:柱体宽度
    • label:柱体类别
x = np.arange(1,16)
y = np.array([1932,5633,4834,8934,3423,3891,7830,1329,3530,4529,5626,6823,6521,8425,5831])

# 根据一组数据绘图
plt.bar(x,y,tick_label=['FY01','FY02','FY03','FY04','FY05','FY06','FY07','FY08','FY09','FY010','FY011','FY012','FY013','FY014','FY015'])
plt.show()
图片[5]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
x = np.arange(1,16)
y = np.array([1932,5633,4834,8934,3423,3891,7830,1329,3530,4529,5626,6823,6521,8425,5831])
y1 = np.array([1332,3633,6834,7934,8423,9891,3830,5329,4530,7529,8626,5823,6521,3425,9831])

# 根据两组数据绘图
plt.bar(x,y,tick_label=['FY01','FY02','FY03','FY04','FY05','FY06','FY07','FY08','FY09','FY010','FY011','FY012','FY013','FY014','FY015'],width=0.5)
plt.bar(x,y1,tick_label=['FY01','FY02','FY03','FY04','FY05','FY06','FY07','FY08','FY09','FY010','FY011','FY012','FY013','FY014','FY015'],width=0.5)
plt.show()
  • width:柱形的宽度
图片[6]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
x = np.arange(1,6)
y = np.array([1932,5633,4834,8934,3423])
y1 = np.array([1332,3633,6834,7934,8423])
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
a = plt.bar(x,y,tick_label=['FY01','FY02','FY03','FY04','FY05'],width=0.5, label='A')
b = plt.bar(x+0.5,y1,width=0.5, label='B')# 添加注释文本

def autolabel(objs):
    for obj in objs:
        # 获取每个柱子的高度
        objH = obj.get_height()
        # 获取每个柱子的 x 值
        objX = obj.get_x()
        # 获取每个柱子的宽度
        objW = obj.get_width()
        plt.text(objX + objW / 2,objH + 30,s='{}'.format(objH),ha = 'center',va = 'bottom',fontsize = 9)

autolabel(a)
autolabel(b)
# 添加图例
plt.legend(handles=[a, b], labels=['A', 'B'])
plt.show()
图片[7]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

直方图

  • plt.hist(arr ,bins ,color ,edgecolor ,alpha)
    • arr:传入的数据(数组)
    • bins:将传入的数据分成对应的份数
    • edgecolor:柱子的轮廓颜色
    • alpha:柱子颜色的透明度
    • 返回值:
      • nums:频数
      • bins:区间
      • patches:矩形对象
  • plt.xticks(bins ,bins):显示直方图的刻度值
    • bins:区间数据
arr = np.random.randint(0,256,50)

# 根据一组数据绘图
plt.hist(arr,bins = 10,color='c',edgecolor='r',alpha=0.7)
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
plt.show()
图片[8]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
arr = np.random.randint(0,256,50)

nums,bins,patches= plt.hist(arr,bins = 10,color='c',edgecolor='r',alpha=0.7)
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
plt.xticks(bins,bins)
plt.show()
图片[9]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

散点图

  • plt.scatter(x ,y ,s ,c ,edgecolor)
    • x:x 轴数据(数组类型)
    • y:y 轴数据(数组类型)
    • s:数据点的大小
    • c:数据点的颜色
    • edgecolor:数据点的轮廓颜色
  • plt.grid(visible ,linewidth):设置网格线
    • visible:是否显示网格线
    • linewidth:网格线的宽度
  • plt.xlim(left ,right):设置水平方向左右两边的预留宽度
    • left:设置左边的预留宽度
    • right:设置右边的预留宽度
area = np.array([255.98,247.07,253.14,457.85,241.58,301.01,20.67,288.64,163.53,120.06,
                 207.83,342.75,147.9,53.06,224.72,29.51,400.65,205.35,330.64,339.25])
price=np.array([196.63,203.88,210.75,372.74,202.41,247.61,24.9,239.34,140.32,104.15,
                176.84,288.23,128.79,49.65,191.74,33.1,30.74,400.02,205.02,330.654])

# 根据一组数据绘图
plt.scatter(area,price,s=50,c='y',edgecolor='k')
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
plt.show()
图片[10]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
area = np.array([255.98,247.07,253.14,457.85,241.58,301.01,20.67,288.64,163.53,120.06,
                 207.83,342.75,147.9,53.06,224.72,29.51,400.65,205.35,330.64,339.25])
price=np.array([196.63,203.88,210.75,372.74,202.41,247.61,24.9,239.34,140.32,104.15,
                176.84,288.23,128.79,49.65,191.74,33.1,30.74,400.02,205.02,330.654])

plt.scatter(area,price,s=50,c='y',edgecolor='k')
plt.grid(visible=True,linewidth=0.5)
plt.xlim(area.min()-30,area.max()+30)
plt.title('大标题')
plt.xlabel('x 轴标题')
plt.ylabel('y 轴标题')
plt.show()
图片[11]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

使用 Seaborn 绘图

Matplotlib 是比较优秀的绘图库,但是 API 使用起来比较过于复杂,其内部有上千个函数,且每个函数都有非常多的参数。Seaborn 基于 Matplotlib 进行了更高级的封装,相比 Matplotlib 可以轻松地画出漂亮的图表,使用图表的配色更加舒服,以及图表元素的样式更加细腻。

import seaborn as sns
  • sns.load_dataset(name ,data_home = 'data/seaborn-data'):加载自带的数据(加载成功后得到一个 DataFrame 对象)
    • name:数据集名称
    • data_home:表示缓存数据的目录

可视化数据的分布

  • sns.displot(arr ,bins ,kind ,rug)(默认绘制直方图)
    • arr:数据(数组)
    • bins:需要将数据分成的组数
    • kind:图像类型
      • kde:平滑密度曲线图(看数据集中的地方,分布形状是否时堆成的,有没有多个峰值)
      • rug:是否在地毯图(x 轴上)上显示原始数据
  • sns.jointplot(x ,y ,data):用于绘制散点图、二维直方图、二维密度图
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
    • kind:图像的类型
      • hex:六边形图
      • kde:核密度估计图(颜色越深,数据点密度越高)
    • shade:是否填充颜色
# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.displot(tips['total_bill'],bins=10)
图片[12]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

平滑密度曲线图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.displot(tips['total_bill'],kind='kde')
图片[13]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

显示密度观察条:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.displot(tips['total_bill'],kind='kde',rug=True)
图片[14]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

在 Seaborn 中,jointplot() 函数用于绘制散点图、二维直方图、二维密度图,以反映两变量之间的关系,以及每个变量在单独坐标轴上的分布情况。

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.jointplot(x='total_bill',y='tip',data=tips)
图片[15]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

六边形图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.jointplot(x='total_bill',y='tip',data=tips,kind='hex')
图片[16]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

核密度估计图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.jointplot(x='total_bill',y='tip',data=tips,kind='kde',shade=True)
图片[17]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
tips = pd.DataFrame({
    'total_bill': [16.99, 10.34, 21.01, 23.68, 24.59, 25.29, 8.77, 26.88, 15.04,
                   14.78, 10.27, 35.26, 15.42, 18.43, 14.87, 21.58, 10.33, 16.29,
                   16.97, 20.65, 17.92, 20.29, 15.77, 39.42, 19.82, 17.81, 13.37,
                   12.69, 21.70, 19.65, 9.55, 18.35, 15.06, 20.69, 17.78, 24.06,
                   16.31, 16.50, 18.42, 17.65, 22.01, 18.60, 17.37, 17.40, 15.50],
    'tip': [1.01, 1.66, 3.50, 3.31, 3.61, 4.71, 2.00, 3.12, 1.96, 3.23, 1.71,
            5.00, 1.57, 3.00, 1.66, 3.50, 1.50, 3.08, 2.75, 3.35, 2.55, 3.60,
            1.50, 7.56, 2.00, 1.72, 1.57, 1.45, 4.00, 1.58, 1.50, 2.00, 1.56,
            3.09, 2.75, 3.00, 2.41, 3.00, 2.15, 2.10, 3.00, 1.51, 1.50, 2.60, 1.93],
    'sex': ['Female','Male','Male','Male','Female','Male','Male','Male','Male',
            'Male','Male','Female','Male','Male','Female','Male','Female','Male',
            'Female','Male','Male','Male','Male','Male','Male','Male','Male','Male',
            'Male','Male','Female','Male','Male','Male','Male','Female','Male','Male',
            'Male','Male','Male','Male','Male','Female','Male'][:45],
    'smoker': ['No','No','No','No','No','No','No','No','No','No','Yes','No','No','No',
               'No','No','No','No','No','No','Yes','No','Yes','No','No','No','No','No',
               'No','No','No','No','No','No','Yes','No','No','No','No','No','Yes','No',
               'No','No','No'][:45],
    'day': ['Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun',
            'Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Sun','Thur','Thur','Thur',
            'Thur','Thur','Thur','Thur','Thur','Thur','Thur','Fri','Fri','Fri','Fri',
            'Fri','Sat','Sat','Sat','Sat','Sat','Sat','Sat','Sat','Sat'][:45],
    'time': ['Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner',
             'Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner',
             'Dinner','Dinner','Dinner','Dinner','Dinner','Lunch','Lunch','Lunch','Lunch',
             'Lunch','Lunch','Lunch','Lunch','Lunch','Lunch','Lunch','Lunch','Lunch','Lunch',
             'Lunch','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner','Dinner',
             'Dinner'][:45],
    'size': [2, 3, 3, 2, 4, 4, 2, 4, 2, 2, 2, 2, 2, 4, 2, 2, 3, 3, 2, 2, 2, 2,
             2, 6, 2, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 2, 4, 3, 2, 3, 3][:45]
})

tips.head()

用分类数据绘图

分类数据时比较常见的数据类型,他按照现象的某种属性进行分类或分组而得到的反应事物类型的数据。

  • sns.stripplot(x ,y ,data):根据分类数据绘制散点图
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
  • sns.awarmplot(x ,y ,data):根据分类数据绘制散点图(数据点不会重叠)
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
  • sns.boxplot(x ,y ,data):箱型图
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
  • sns.violinplot(x ,y ,data):小提琴图
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
  • sns.barplot(x ,y ,data):柱形图
    • x:x 轴的数据列名,用于获取 data 中的列数据
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
  • sns.pointplot(x ,y ,data):点图
    • data:提供的数据对象
    • y:y 轴的数据列名,用于获取 data 中的列数据
    • data:提供的数据对象
# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.stripplot(x='day',y='total_bill',data=tips)
图片[18]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客
# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

# 解决数据点重叠的为题
sns.swarmplot(x='day',y='total_bill',data=tips)
图片[19]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

如果希望查看每个分类下数据的分布情况,可以通过箱型图和提琴图进行展示,其中箱型图可以查看数据的四分位的情况,而小提琴图结合了箱型图与核密度图的特征,用于展示多组数据的分布情况以及概率密度。

箱型图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.boxplot(x='day',y='total_bill',data=tips)
图片[20]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

小提琴图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.violinplot(x='day',y='total_bill',data=tips)
图片[21]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

要想查看分类数据中每个分类的集中趋势,可以使用柱形图和点位图进行展示。

柱形图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.barplot(x='day',y='total_bill',data=tips)
图片[22]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

点图:

# 加载自带的数据(加载成功后得到一个 DataFrame 对象)
tips = sns.load_dataset('tips',data_home = 'data/seaborn-data')

sns.pointplot(x='day',y='total_bill',data=tips)
图片[23]-[学习笔记 Day09]数据分析与应用:数据可视化-资源刺客

使用 Pyecharts 绘图

Pyecharts 是一个用于生成 Echarts 图表的开源库,它可以帮助用户在不了解 JavaScript 语言的情况,通过自身封装的一些方法绘制基于 JavaScript 实现的 Echarts 图表,使图表呈现出炫酷的效果。

Pyecharts 库支持绘制多种图表类型,包括基本图表(包含饼图、雷达图、词云图、漏斗图等)、直角坐标系图表、树形图表、地理图表、3D 图表、组合图表。

创建步骤:

  • 创建图表类的对象
    • Pyecharts 库的 charts 模块中提供了很多封装图表功能的图标类,具体如下:
说明说明
Line折线图WordCloud词云图
PictorialBar象形柱形图Map统计地图
Bar柱形图 / 条形图HeatMap热力图
Scatter散点图 / 气泡图Funnel漏斗图
Boxplot箱型图Gauge仪表盘
Radar雷达图SanKey桑基图
Pie饼图 / 圆环图Tree树状图
pyecharts.charts 常用的图表类

表中所有的类都继承自 Base 基类,他们可以使用类名同名的构造方法实例化对象。例如:Bar 类的构造方法的语法格式如下:

# init_opts 参数表示初始化配置项,用于给图表指定一些通用的属性,比如背景颜色、画布大小等
Bar(init_opts = opts.InitOpts())

创建一个 Bar 类的对象,并使用默认大小的画布:

from pyecharts.charts from Bar

bar = Bar()
  • 添加图表用到的数据
    • 每个图表类的内部都提供了添加图表用到的数据的方法 add()add_xxx() 方法,其中直角坐标系图表类一般可以通过 add_xaxis()add_yaxis() 方法添加 x 轴或 y 轴的数据。
bar.add_xaxis(['羊毛衫','衬衫','裤子','短袖','高跟鞋','袜子'])
bar.add_yaxis('商家 A',[5000,2000,3600,1000,9000,7500])
  • 添加图表配置项
    • Pyecharts 库的 options 模块中包含众多关于制定图表组件及样式的配置项,具体如下:
说明说明
InitOpts初始化配置项VisualMapOpts视觉映射配置项
AnumationOptsEcharts 画图动画配置项TooltipOpts提示框配置项
ToolBoxFeatureOpts工具箱工具配置项AxisLineOpts坐标轴轴脊配置项
ToolBoxOpts工具箱配置项AxisTickOpts坐标轴刻度配置项
BrushOpts区域选择组件配置项AxisPointerOpts坐标轴指示器配置项
TitleOpts标题配置项AxisOpts坐标轴配置项
DataZoomOpts数据区域缩放配置项SingleAxisOpts单轴配置项
LegendOpts图例配置项GraphicGroup原生图形元素配置项
常用的全局配置项

表中的配置项,每个类都可以通过与类同名的构造方法实例化对象,例如:通过 TitleOpts 类的构造方法创建 TitleOpts 类的对象。

from pyechars import options as opts

opts.TitleOpts(title = '我是柱形图',subtitle = '我是副标题')
说明说明
ItemStyleOpts图元样式配置项MarkLineOpts标记先配置项
TextStyleOpts文本样式配置项MarkAreaOpts标记区域配置项
LabelOpts标签配置项EffectOpts涟漪特效配置项
LineStyleOpts线条样式配置项AreaStyleOpts区域填充样式配置项
SpliteLineOpts分割线配置项SpliteAreaOpts分割区域配置项
MarkPointOpts标记点配置项GridOpts直角坐标系网格配置项
常用系列配置项

在表中,每个类都可以通过与类同名的构造方法实例化对象,例如:通过 LabelOpts 类的构造方法创建 LabelOpts 类的对象,生成一个标签配置项。

opts.LabelOpts(position = 'inside',color = 'white',font_size=10)

如果需要为图表添加系列配置项,则需要将系列配置项传入到 add() 或 add_xx() 的方法中。

  • 渲染图表
    • 图表 Base 基类提供了渲染图表的方法,分别是 render()render_notebook(),其中 render() 方法用于将图表渲染到 HTML 文件,默认为位于程序根目录的 render.html 文件;render_notebook() 方法用于将图表渲染到 Jupyter Notebook 工具中。
bar.render_notebook()

绘制柱形图

import pandas as pd
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK

job = pd.DataFrame({
    '地区': ['北京','上海','云南','浙江','重庆','南京','天津','河北','西安','武汉'],
    '指数': [80, 90, 40, 50, 60, 89, 45, 76, 92, 89]
})

bar = (
    Bar()
    .add_xaxis(job['地区'].tolist())
    .add_yaxis('指数', job['指数'].tolist())
    .set_global_opts(
        title_opts=opts.TitleOpts(title='数据分析'),
        yaxis_opts=opts.AxisOpts(name='指数', name_location='center', name_gap=35)
    )
)

bar.render_notebook()

绘制词云图

import pandas as pd
from pyecharts.charts import WordCloud
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK

job = pd.DataFrame({
    '地区': ['北京','上海','云南','浙江','重庆','南京','天津','河北','西安','武汉'],
    '指数': [80, 90, 40, 50, 60, 89, 45, 76, 92, 89]
})

bar = (
    WordCloud()
    .add('',data_pair = list(zip(job['地区'].tolist(),job['指数'].tolist())),word_size_range = [6,40])
    .set_global_opts(
        title_opts=opts.TitleOpts(title='数据分析'),
        yaxis_opts=opts.TextStyleOpts(font_size = 23)
    )
)

bar.render_notebook()

绘制气泡图

import pandas as pd
from pyecharts.charts import Scatter
from pyecharts import options as opts
from pyecharts.globals import CurrentConfig, NotebookType
from pyecharts.commons.utils import JsCode  # ← 漏了这个导入

CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_NOTEBOOK

job = pd.DataFrame({
    '地区': ['北京','上海','云南','浙江','重庆','南京','天津','河北','西安','武汉'],
    '指数': [80, 90, 40, 50, 60, 89, 45, 76, 92, 89],
    '平均薪资': [12000, 19500, 4400, 8250, 7460, 7189, 8945, 8676, 8392, 9989]
})

scatter = (
    Scatter()
    .add_xaxis(job['平均薪资'].tolist())
    .add_yaxis(
        '指数',
        [list(z) for z in zip(job['平均薪资'].tolist(), job['指数'].tolist())],
        label_opts=opts.LabelOpts(
            formatter=JsCode('function(params){return params.value[2]}')
        )
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(title='数据分析'),
        visualmap_opts=opts.VisualMapOpts(
            type_='size', max_=1500, min_=200, dimension=1
        ),
        tooltip_opts=opts.TooltipOpts(
            formatter=JsCode('function(params){return "平均薪资:"+params.value[0]}')
        ),
        xaxis_opts=opts.AxisOpts(
            min_=4000, name='平均薪资', name_location='center', name_gap=23
        ),
        yaxis_opts=opts.AxisOpts(
            min_=300, max_=1800, name='指数', name_location='center', name_gap=40
        )
    )
)

scatter.render_notebook()

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容