1 Python数据可视化:类别比较图表可视化-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python数据可视化:类别比较图表可视化

jf_Vqngj70R 来源:美男子玩编程 作者:美男子玩编程 2022-11-15 15:09 次阅读

在学习本篇博文之前请先看一看之前发过的关联知识:

Python数据可视化:如何选择合适的图表可视化?

根据表达数据的侧重内容点,将图表类型分为6大类:类别比较图表、数据关系图表、数据分布图表、时间序列图表、局部整体图表和地理空间图表(有些图表也可以归类于两种或多种图表类型)。

本篇将介绍类别比较图表的可视化方法。

类别比较型图表的数据一般分为:数值型和类别型两种数据类型,主要包括:柱形图、条形图、雷达图、词云图等,通常用来比较数据的规模。如下所示:

e016fbd8-649a-11ed-8abf-dac502259ad0.png

1

柱状图

柱形图是一种以长方形的长度为变量的统计图表。柱形图用于显示一段时间内的数据变化或显示各项之间的比较情况。

在柱形图中,类别型或序数型变量映射到横轴的位置,数值型变量映射到矩形的高度。控制柱形图的两个重要参数是:“系列重叠"和“分类间距”。

  • “分类间距"控制同一数据系列的柱形宽度;

  • “系列重叠"控制不同数据系列之间的距离。

下图为常见的柱形图类型:单数据系列柱形图、多数据系列柱形图、堆积柱形图和百分比堆积柱形图。

e05c82a2-649a-11ed-8abf-dac502259ad0.png

1.1、单数据系列柱形图

通过一个示例了解单数据系列柱形图的使用,实现代码如下所示:

mydata = pd.DataFrame({'Cut': ["Fair", "Good", "Very Good", "Premium", "Ideal"],
                       'Price': [4300, 3800, 3950, 4700, 3500]})


Sort_data = mydata.sort_values(by='Price', ascending=False)


fig = plt.figure(figsize=(6, 7), dpi=70)
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
plt.grid(axis="y", c=(217/256, 217/256, 217/256))  # 设置网格线
# 将网格线置于底层
ax = plt.gca()  # 获取边框
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为红色
ax.spines['right'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置上‘脊梁’为无色


plt.bar(Sort_data['Cut'], Sort_data['Price'],
        width=0.6, align="center", label="Cut")


plt.ylim(0, 6000)  # 设定x轴范围
plt.xlabel('Cut')
plt.ylabel('Price')
plt.show()

	

效果如下所示:

e081bb26-649a-11ed-8abf-dac502259ad0.png

1.2、多数据系列柱形图

通过一个示例了解多数据系列柱形图的使用,实现代码如下所示:


	
x_label = np.array(df["Catergory"])
x = np.arange(len(x_label))
y1 = np.array(df["1996"])
y2 = np.array(df["1997"])


fig = plt.figure(figsize=(5, 5))
plt.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)  # 设置绘图区域大小位置


plt.bar(x, y1, width=0.3, color='#00AFBB', label='1996', edgecolor='k',
        linewidth=0.25)  # 调整y1轴位置,颜色,label为图例名称,与下方legend结合使用
plt.bar(x+0.3, y2, width=0.3, color='#FC4E07', label='1997',
        edgecolor='k', linewidth=0.25)  # 调整y2轴位置,颜色,label为图例名称,与下方legend结合使用
plt.xticks(x+0.15, x_label, size=12)  # 设置x轴刻度,位置,大小


# 显示图例,loc图例显示位置(可以用坐标方法显示),ncol图例显示几列,默认为1列,frameon设置图形边框
plt.legend(loc=(1, 0.5), ncol=1, frameon=False)


plt.yticks(size=12)  # 设置y轴刻度,位置,大小
plt.grid(axis="y", c=(217/256, 217/256, 217/256))  # 设置网格线
# 将y轴网格线置于底层
# plt.xlabel("Quarter",labelpad=10,size=18,)                          #设置x轴标签,labelpad设置标签距离x轴的位置
# plt.ylabel("Amount",labelpad=10,size=18,)                                   #设置y轴标签,labelpad设置标签距离y轴的位置




ax = plt.gca()  
ax.spines['top'].set_color('none')  # 设置上‘脊梁’为无色
ax.spines['right'].set_color('none')  # 设置右‘脊梁’为无色
ax.spines['left'].set_color('none')  # 设置左‘脊梁’为无色


plt.show()

	

效果如下所示:

e09a4de4-649a-11ed-8abf-dac502259ad0.png

1.3、堆积柱形图

通过一个示例了解堆积柱形图的使用,实现代码如下所示:


		
# -*- coding: utf-8 -*-
# %%
import pandas as pd
import numpy as np
from plotnine import *




mydata = pd.DataFrame(dict(Name=['A', 'B', 'C', 'D', 'E'],
                           Scale=[35, 30, 20, 10, 5],
                           ARPU=[56, 37, 63, 57, 59]))


# 构造矩形X轴的起点(最小点)
mydata['xmin'] = 0
for i in range(1, 5):
    mydata['xmin'][i] = np.sum(mydata['Scale'][0:i])


# 构造矩形X轴的终点(最大点)
mydata['xmax'] = 0
for i in range(0, 5):
    mydata['xmax'][i] = np.sum(mydata['Scale'][0:i+1])


mydata['label'] = 0
for i in range(0, 5):
    mydata['label'][i] = np.sum(mydata['Scale'][0:i+1])-mydata['Scale'][i]/2


base_plot = (ggplot(mydata) +
             geom_rect(aes(xmin='xmin', xmax='xmax', ymin=0, ymax='ARPU', fill='Name'), colour="black", size=0.25) +
             geom_text(aes(x='label', y='ARPU+3', label='ARPU'), size=14, color="black") +
             geom_text(aes(x='label', y=-4, label='Name'), size=14, color="black") +
             scale_fill_hue(s=0.90, l=0.65, h=0.0417, color_space='husl') +
             ylab("ARPU") +
             xlab("scale") +
             ylim(-5, 80) +
             theme(  # panel_background=element_rect(fill="white"),
    #panel_grid_major = element_line(colour = "grey",size=.25,linetype ="dotted" ),
    #panel_grid_minor = element_line(colour = "grey",size=.25,linetype ="dotted" ),
    text=element_text(size=15),
    legend_position="none",
    aspect_ratio=1.15,
    figure_size=(5, 5),
    dpi=100
))
print(base_plot)

2

条形图

条形图与柱形图类似,几乎可以表达相同多的数据信息

在条形图中,类别型或序数型变量映射到纵轴的位置,数值型变量映射到矩形的宽度。条形图的柱形变为横向,从而导致与柱形图相比,条形图更加强调项目之间的大小对比。尤其在项目名称较长以及数量较多时,采用条形图可视化数据会更加美观、清晰,如下图所示:

e139e822-649a-11ed-8abf-dac502259ad0.png

2.1、单数据系列条形图

通过一个示例了解单数据系列条形图的使用,实现代码如下所示:


		
df = pd.read_csv('Stackedbar_Data.csv')


df = df.sort_values(by='Pensions', ascending=True)


df['Country'] = pd.Categorical(df['Country'], categories=df['Country'], ordered=True)
df


# %%
base_plot = (ggplot(df, aes('Country', 'Pensions')) +
             # "#00AFBB"
             geom_bar(stat="identity", color="black", width=0.6, fill="#FC4E07", size=0.25) +

实现效果如下所示:

e1547b56-649a-11ed-8abf-dac502259ad0.png

2.2、多数据系列条形图

通过一个示例了解多数据系列条形图的使用,实现代码如下所示:


			
df = pd.read_csv('Stackedbar_Data.csv')

效果如下所示:

e17e22da-649a-11ed-8abf-dac502259ad0.png

2.3、堆积条形图

通过一个示例了解堆积条形图的使用,实现代码如下所示:

df = pd.read_csv('Stackedbar_Data.csv')
Sum_df = df.iloc[nonedisplay: none;'>

e1986816-649a-11ed-8abf-dac502259ad0.png

2.4、百分比堆积条形图

通过一个示例了解百分比堆积条形图的使用,实现代码如下所示:

df = pd.read_csv('Stackedbar_Data.csv')

							

效果如下所示:

e1faa5bc-649a-11ed-8abf-dac502259ad0.png

4

词云图

词云图通过使每个字的大小与其出现频率成正比,显示不同单词在给定文本中的出现频率,这会过滤掉大量的文本信息,使浏览者只要一眼扫过文本就可以领略文本的主旨。

词云图会将所有的字词排在一起,形成云状图案,也可以任何格式排列:水平线、垂直列或其他形状,也可用于显示获分配元数据的单词。如下图所示:

e33cfb5a-649a-11ed-8abf-dac502259ad0.png每个圆圈表示一个数值刻度,而径向分隔线(从中心延伸出来的线)则用于区分不同类别或间隔(如果是直方图)。刻度上较低的数值通常由中心点开始,然后数值会随着每个圆形往外增加,但也可以把任何外圆设为零值,这样里面的内圆就可用来显示负值。条形通常从中心点开始向外延伸,但也可以以别处为起点,显示数值范围(如跨度图)。

此外,条形也可以如堆叠式条形图般堆叠起来,如下图所示:

e3d8bd60-649a-11ed-8abf-dac502259ad0.png

8

热力图

热力图是一种通过对色块着色来显示数据的统计图表,绘图时需指定颜色映射的规则。例如,较大的值由较深的颜色表示,较小的值由较浅的颜色表示;较大的值由偏暖的颜色表示,较小的值由较冷的颜色表示等。

通过一个示例了解热力图的使用,实现代码如下所示:

import numpy as np
import pandas as pd
from plotnine import *
from plotnine.data import mtcars


mat_corr = np.round(mtcars.corr(), 1).reset_index()
mydata = pd.melt(mat_corr, id_vars='index', var_name='var', value_name='value')
mydata


# %%
base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', label='value')) +
             geom_tile(colour="black") +
             geom_text(size=8, colour="white") +
             scale_fill_cmap(name='RdYlBu_r') +
             coord_equal() +
             theme(dpi=100, figure_size=(4, 4)))
print(base_plot)


# %%
mydata['AbsValue'] = np.abs(mydata.value)


base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', size='AbsValue')) +
             geom_point(shape='o', colour="black") +
             # geom_text(size=8,colour="white")+
             scale_size_area(max_size=11, guide=False) +
             scale_fill_cmap(name='RdYlBu_r') +
             coord_equal() +
             theme(dpi=100, figure_size=(4, 4)))
print(base_plot)


# %%
base_plot = (ggplot(mydata, aes(x='index', y='var', fill='value', size='AbsValue')) +
             geom_point(shape='s', colour="black") +
             # geom_text(size=8,colour="white")+
             scale_size_area(max_size=10, guide=False) +
             scale_fill_cmap(name='RdYlBu_r') +
             coord_equal() +
             theme(dpi=100, figure_size=(4, 4)))
print(base_plot)

							

效果如下所示:

e3f754d2-649a-11ed-8abf-dac502259ad0.png

e41ddce2-649a-11ed-8abf-dac502259ad0.png

e4472886-649a-11ed-8abf-dac502259ad0.png


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可视化
    +关注

    关注

    1

    文章

    1194

    浏览量

    20932
  • 图表
    +关注

    关注

    0

    文章

    25

    浏览量

    8855
  • python
    +关注

    关注

    56

    文章

    4792

    浏览量

    84623

原文标题:Python数据可视化:类别比较图表可视化

文章出处:【微信号:美男子玩编程,微信公众号:美男子玩编程】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    什么是大屏数据可视化?特点有哪些?

    介绍: 特点 直观易懂:大屏数据可视化通过图表、图形和其他可视化元素,将复杂的数据转化为直观易懂的形式,使得用户无需深入挖掘
    的头像 发表于 12-16 16:59 113次阅读

    如何找到适合的大屏数据可视化系统

    选择合适的大屏数据可视化系统是企业或组织在数字转型过程中至关重要的一步。一个优秀的大屏数据可视化系统能够实时呈现关键业务
    的头像 发表于 12-13 15:47 103次阅读

    Minitab 数据可视化技巧

    数据分析领域,数据可视化是一种将数据以图形或图像的形式展示出来的技术,它可以帮助我们更直观地理解数据,发现
    的头像 发表于 12-02 15:40 272次阅读

    智慧能源可视化监管平台——助力可视化能源数据管理

    博达可视化大屏设计平台在智慧能源领域的价值体现在实时监控、数据可视化、决策支持和效率提升等方面。借助该平台,企业可以轻松搭建智慧能源类可视化大屏,更加精确和高效地管理生产和生活,实现能
    的头像 发表于 11-29 10:00 263次阅读
    智慧能源<b class='flag-5'>可视化</b>监管平台——助力<b class='flag-5'>可视化</b>能源<b class='flag-5'>数据</b>管理

    智慧楼宇可视化的优点

    监控与管理:智慧楼宇可视化系统可以实时监测楼宇各项数据指标,包括能耗、水量、空气质量、安全等情况,让管理者随时了解楼宇运行状态,及时发现问题并做出调整。 2.数据可视化呈现:通过
    的头像 发表于 11-19 14:25 179次阅读

    大屏数据可视化 开源

    在当今信息爆炸的时代,数据已经成为各个行业决策制定和业务发展的关键。为了更直观、准确地理解和利用海量数据, 大屏数据可视化 成为一种强大的工具。通过将
    的头像 发表于 06-27 16:06 401次阅读
    大屏<b class='flag-5'>数据</b><b class='flag-5'>可视化</b> 开源

    如何实现园区大屏可视化

    如何实现园区大屏可视化? 1.建立孪生模型:首先需要建立园区的孪生模型,即一个数字的虚拟模型,反映了园区的实际情况、结构、设备、人员等信息。这个模型可以通过传感器、监控设备、GIS 数据等实时获取和更新,确保与实际情况保持
    的头像 发表于 06-19 15:39 409次阅读
    如何实现园区大屏<b class='flag-5'>可视化</b>?

    物联网时代,为什么需要可视化数据大屏

    效率、能耗水平等信息,从而合理优化并采取措施,促进企业的数字转型。 由于人类大脑对视觉信息的处理优于对文本的处理,因此使用图表、图形和设计元素把数据进行可视化,可以帮助更容易的了解
    的头像 发表于 06-18 13:53 366次阅读
    物联网时代,为什么需要<b class='flag-5'>可视化</b><b class='flag-5'>数据</b>大屏

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一种将数据以图形、图像、动画等视觉形式展现出来的技术,特别是在处理和分析态势数据时,该技术能够将复杂的数据
    的头像 发表于 06-11 15:47 367次阅读

    智慧大屏是如何实现数据可视化的?

    智慧大屏,作为数据可视化的重要载体,已在城市管理、交通监控、商业运营等领域广泛应用。本文旨在阐述智慧大屏实现数据可视化的关键技术和方法,包括数据
    的头像 发表于 06-04 15:02 598次阅读
    智慧大屏是如何实现<b class='flag-5'>数据</b><b class='flag-5'>可视化</b>的?

    大屏数据可视化的作用和意义

    大屏数据可视化是指利用大屏幕设备展示数据信息,通过图表、图像、动画等视觉手段将数据呈现出来,以
    的头像 发表于 06-03 17:56 661次阅读

    大屏数据可视化是什么?运用了什么技术

    大屏数据可视化 是一种利用大屏幕设备展示数据可视化结果的技术,旨在以更生动、直观的方式呈现数据信息。这种
    的头像 发表于 05-24 15:35 846次阅读

    数据可视化:企业数字建设效果的呈现

    数据可视化即通过图表的形式将数据的内在信息有逻辑性地呈现给用户,使用户更容易发现数据中蕴藏的规律,找出问题,进而做出决策;另一方面,
    的头像 发表于 04-29 10:18 457次阅读
    <b class='flag-5'>数据</b><b class='flag-5'>可视化</b>:企业数字<b class='flag-5'>化</b>建设效果的呈现

    态势数据可视化技术有哪些

    智慧华盛恒辉态势数据可视化技术是一种将复杂、动态的态势数据以直观、易于理解的方式展现出来的技术手段。以下是几种主要的态势数据可视化技术: 网
    的头像 发表于 04-22 15:17 400次阅读