热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

手把手教你用plotly绘制excel中常见的16种图表(上)

大家好,我是老表~最近不是在学习plotly嘛,为了方便理解,我们这里取excel绘图中常见的16种图表为例,

大家好,我是老表~

最近不是在学习plotly嘛,为了方便理解,我们这里取excel绘图中常见的16种图表为例,分两期演示这些基础图表怎么用plotly进行绘制!

  • 第一部分:柱状图、条形图、折线图、面积图、饼图与圆环图、散点图、气泡图和极坐标(雷达图)

  • 第二部分:树状图、旭日图、直方图、箱线图、瀑布图、漏斗图、股价图和地图

excel插入图表

今天,我们介绍第一部分8类图表的绘制。文末有全部演示代码ipynb文件获取方式。

目录:

  • 0. 准备工作

  • 1. 柱状图

  • 2. 条形图

  • 3. 折线图

  • 4. 面积图

  • 5. 饼图与圆环图

  • 6. 散点图

  • 7. 气泡图

  • 8. 极坐标(雷达图)

0. 准备工作

我这边是在jupyterlab中演示的plotly图表,如果只安装plotly是无法正常显示图表的(会显示为空白),我们需要进行以下准备(以下命令均在cmd下操作即可):

# 安装plotly库及plotly-orca库
pip install plotly
pip install plotly plotly-orca# Basic JupyterLab renderer support
jupyter labextension install jupyterlab-plotly# OPTIONAL: Jupyter widgets extension for FigureWidget support
jupyter labextension install @jupyter-widgets/jupyterlab-manager plotlywidget

参考:https://github.com/plotly/plotly.py

plotly有两种绘图方式,其一是原始graph_objects,其二是Plotly Express。我们这里用到的是后者,至于其中的区别,大概就是后者是高级版本,封装了很多后者的复杂操作,可以直接用pandas.Dataframe类型,是现在主推的。

1. 柱状图

我们知道,在excel插入图表的时候,柱状图一般可选堆叠柱状图簇状柱状图

柱状图:

# 自带数据集 gapminder
data = px.data.gapminder()
data.head()

gapminder

# 柱状图
import plotly.express as px
data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(data_canada, # 数据集x='year', # x轴y='pop', # y轴
)
fig.show()

柱状图

堆叠柱状图:

# 自带数据集 medals_long(长表数据)
long_df = px.data.medals_long()
long_df.head()

medals_long

# 堆叠柱状图 (使用长表数据,这种数据excel无法直接绘制堆叠图)
import plotly.express as pxlong_df = px.data.medals_long()
fig = px.bar(long_df,  # 数据集x="nation",  # x轴y="count",  # y轴color="medal",  # 图例颜色(这种情况下需要设定该参数根据medal类型才区分,否则同色)title="堆叠柱状图 Long-Form Input", # 图表标题
)
fig.show()

堆叠柱状图-长表

# 自带数据集 medals_long(宽表数据)
wide_df = px.data.medals_wide()
wide_df.head()

宽表

# 堆叠柱状图 (使用长表数据,这种数据excel可以直接绘制堆叠图)
import plotly.express as pxwide_df = px.data.medals_wide()
fig = px.bar(wide_df, x="nation", y=["gold", "silver", "bronze"], title="堆叠柱状图 Wide-Form Input")
fig.show()

堆叠柱状图-宽表

**簇状柱状图 **:

# 簇状柱状图
import plotly.express as pxlong_df = px.data.medals_long()
fig = px.bar(long_df,  x="nation",  y="count",  color="medal",  title="簇状柱状图 Long-Form Input", barmode='group', # barmode 设置为 group则为簇状柱形图,可选 stack(叠加)、group(并列)、overlay(覆盖)、relative(相对)
)
fig.show() 

簇状柱状图

类似于excel里柱状图填充色中依据数据点着色:

# 类似于excel里柱状图填充色中依据数据点着色
import plotly.express as pxdata = px.data.gapminder()
data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, x='year', y='pop',hover_data=['lifeExp', 'gdpPercap'], color='lifeExp', # 指定柱状图颜色根据 lifeExp字段数值大小自动着色labels={'pop':'population of Canada'}, height=400, # 图表高度)
fig.show()

数据点着色

2. 条形图

条形图其实就是柱状图转个90度,横着显示呗。所以,本质上是一样的,唯一的区别:在 Bar 函数中设置orientation='h',其余参数与柱状图相同。

# 在plotly绘图中,条形图与柱状图唯一的区别:在 Bar 函数中设置orientation='h',其余参数与柱状图相同
import plotly.express as px
data = px.data.gapminder()data_canada = data[data.country == 'Canada']
fig = px.bar(data_canada, y='year', x='pop',hover_data=['lifeExp', 'gdpPercap'], color='lifeExp', # 指定柱状图颜色根据 lifeExp字段数值大小自动着色labels={'pop':'population of Canada'}, height=600, # 图表高度width=800, # 图表宽度orientation='h' # 条形图设置参数)
fig.show()

条形图

3. 折线图

折线图大致可以是画一个折线图或多条折线图。

单个折线图:

# 折线图
import plotly.express as pxdf = px.data.gapminder().query("country=='Canada'")
fig = px.line(df, x="year", y="lifeExp", title='Life expectancy in Canada',text='lifeExp', # 数据点显示值line_shape='linear', # 共有6种插值方式:'linear'、'spline'、'hv'、'vh'、'hvh'和'vhv。)
fig.update_traces(texttemplate='%{text:.2f}', # 数据点显示值的格式textposition='top center', # 数据点显示的位置:'top left', 'top center', 'top right', 'middle left','middle center', 'middle right', 'bottom left', 'bottom center', 'bottom right'

fig.show()

单折线图

多折线图:

# 多折线图
import plotly.express as px# 比如绘制大洋洲(有澳大利亚和新西兰)
df = px.data.gapminder().query("continent=='Oceania'")
fig = px.line(df, x="year", y="lifeExp", color='country', # 按照国家区分)
fig.show()

多折线图

分组多折线图:

# 分组多折线图
import plotly.express as px# 绘制各大洲每个国家人均寿命随着时间变化曲线
df = px.data.gapminder().query("continent != 'Asia'") # remove Asia for visibility
fig = px.line(df, x="year", y="lifeExp", color="continent",line_group="country", hover_name="country")
fig.show()

分组多折线图

4. 面积图

import plotly.express as px# 比如绘制大洋洲(有澳大利亚和新西兰)
df = px.data.gapminder().query("continent=='Oceania'")
fig = px.area(df, x="year", y="pop", color='country', # 按照国家区分)
fig.show()

面积图

5. 饼图与圆环图

我们在用excel绘制饼图的时候,可以选择既定配色方案,还可以自定义每个色块的颜色。用plotly绘制的时候,这些自定义操作也是支持的。

# 饼图
import plotly.express as px# 筛选2007年欧洲数据
df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")
# 将小于200万的国家标记为其他
df.loc[df[&#39;pop&#39;] < 2.e6, &#39;country&#39;] &#61; &#39;Other countries&#39; 
# 绘制饼图
fig &#61; px.pie(df, values&#61;&#39;pop&#39;, names&#61;&#39;country&#39;, title&#61;&#39;Population of European continent&#39;)
fig.show()

饼图

字段多条数据自动处理&#xff1a;

# 自带数据集 tips,字段day下是星期&#xff0c;存在多条
df &#61; px.data.tips()
df.head()

tips数据预览

我们可以看到&#xff0c;在tips数据集中&#xff0c;day字段是星期&#xff0c;包含很多同星期的数据。在进行饼图绘制的时候&#xff0c;以day字段做分类&#xff0c;可以自动实际聚合求和操作

# 如果 分类 标签下有很多数据&#xff0c;则会自动进行分组求和
import plotly.express as px# This dataframe has 244 lines, but 4 distinct values for &#96;day&#96;
df &#61; px.data.tips()
fig &#61; px.pie(df, values&#61;&#39;tip&#39;, names&#61;&#39;day&#39;)
fig.show()

自动聚合做饼图

设置配色方案&#xff1a;

关于配色方案的更多选择&#xff0c;大家可以参考《我又用Python爬取了4000&#43;股票数据&#xff0c;并用plotly绘制了树状热力图(treemap)》里介绍的内容。

# 设置配色方案
import plotly.express as pxdf &#61; px.data.tips()
fig &#61; px.pie(df, values&#61;&#39;tip&#39;, names&#61;&#39;day&#39;, color_discrete_sequence&#61;px.colors.sequential.RdBu, # 设置配色方案)
fig.show()

设置配色方案作图

我们也可以自定义每个色块颜色&#xff1a;

# 自定义配色
import plotly.express as pxdf &#61; px.data.tips()
fig &#61; px.pie(df, values&#61;&#39;tip&#39;, names&#61;&#39;day&#39;, color&#61;&#39;day&#39;,color_discrete_map&#61;{&#39;Thur&#39;:&#39;lightcyan&#39;,&#39;Fri&#39;:&#39;cyan&#39;,&#39;Sat&#39;:&#39;royalblue&#39;,&#39;Sun&#39;:&#39;darkblue&#39;})
fig.show()

自定义每个色块颜色

在饼图上显示数据标签&#xff1a;

# 在饼图上显示数据标签
import plotly.express as pxdf &#61; px.data.gapminder().query("year &#61;&#61; 2007").query("continent &#61;&#61; &#39;Asia&#39;")
fig &#61; px.pie(df, values&#61;&#39;pop&#39;, names&#61;&#39;country&#39;,title&#61;&#39;Population of American continent&#39;,hover_data&#61;[&#39;lifeExp&#39;], labels&#61;{&#39;lifeExp&#39;:&#39;life expectancy&#39;})
fig.update_traces(textposition&#61;&#39;inside&#39;, textinfo&#61;&#39;percent&#43;label&#39; # 数据标签显示的内容)
fig.show()

在饼图上显示数据标签

圆环图&#xff1a;

圆环图是指饼图中间一定半径的圆部分为空白&#xff0c;设置参数hole&#61;int即可&#xff08;0-1&#xff09;。

# 圆环图
import plotly.express as pxdf &#61; px.data.tips()
fig &#61; px.pie(df, values&#61;&#39;tip&#39;, names&#61;&#39;day&#39;, color_discrete_sequence&#61;px.colors.sequential.RdBu,hole&#61;.3, # 设置空心半径比例)
fig.show()

圆环图

6. 散点图

散点图是x和y均为数字列表情况下的坐标点图。

x轴和y轴均是列表的形式&#xff1a;

# x轴和y轴均是列表的形式
import plotly.express as pxfig &#61; px.scatter(x&#61;[0, 1, 2, 3, 4], y&#61;[0, 1, 4, 9, 16])
fig.show()

列表数据散点图

给定pd.Dataframe类型数据&#xff1a;

# 自带数据集 iris
df &#61; px.data.iris()
df.head()

iris数据集
pd.Dataframe类型数据散点图

# 设置数据点颜色和大小
import plotly.express as px
df &#61; px.data.iris()
fig &#61; px.scatter(df, x&#61;"sepal_width", y&#61;"sepal_length", color&#61;"species", # 根据species字段区分颜色size&#61;&#39;petal_length&#39;, # 根据sepal_length设置大小hover_data&#61;[&#39;petal_width&#39;],)
fig.show()

设置数据点颜色额大小

做个三角函数的图&#xff1a;

import plotly.express as px
import numpy as npt &#61; np.linspace(0, 2*np.pi, 100)fig &#61; px.scatter(x&#61;t, y&#61;np.cos(t), labels&#61;{&#39;x&#39;:&#39;t&#39;, &#39;y&#39;:&#39;cos(t)&#39;})
fig.show()

cos(t)

7. 气泡图

# 气泡图
import plotly.express as pxdf &#61; px.data.gapminder()fig &#61; px.scatter(df.query("year&#61;&#61;2007"), x&#61;"gdpPercap", y&#61;"lifeExp",size&#61;"pop",  # 设置气泡大小依据字段popcolor&#61;"continent",hover_name&#61;"country", log_x&#61;True, size_max&#61;60, #设置最大气泡)
fig.show()

气泡图

8. 极坐标(雷达图)

极坐标下&#xff0c;可以用点或线进行构图&#xff0c;绘制点则用px.scatter_polar&#xff0c;绘制线则用px.line_polar

# 自带数据集 wind
df &#61; px.data.wind()
df.head()

wind

import plotly.express as pxdf &#61; px.data.wind()
fig &#61; px.scatter_polar(df, r&#61;"frequency", # 半径theta&#61;"direction", # 类型)
fig.show()

极坐标

着色和分组标识&#xff1a;

import plotly.express as pxdf &#61; px.data.wind()
fig &#61; px.scatter_polar(df, r&#61;"frequency", theta&#61;"direction",color&#61;"strength",  # 颜色根据strength着色symbol&#61;"strength",  # 符号根据strength区分size&#61;"frequency", # 大小根据 frequency 区分color_discrete_sequence&#61;px.colors.sequential.Plasma_r, # 设置配色方案)
fig.show()

着色和分组标识

雷达图&#xff1a;

# 雷达图
import plotly.express as pxdf &#61; px.data.wind()
fig &#61; px.line_polar(df, r&#61;"frequency", theta&#61;"direction", color&#61;"strength", line_close&#61;True, # 线条是否闭环color_discrete_sequence&#61;px.colors.sequential.Plasma_r,template&#61;"plotly_dark", # 主题模板 )
fig.show()

雷达图

扇形区域图&#xff1a;

# 扇形图区域
import plotly.express as pxfig &#61; px.scatter_polar(r&#61;range(0,90,10), theta&#61;range(0,90,10),range_theta&#61;[0,90], # 设定区域start_angle&#61;0, direction&#61;"counterclockwise", # 方位&#xff1a;&#39;counterclockwise&#39; 逆时针 &#xff0c;&#39;clockwise&#39;顺时针 )
fig.show()

扇形区域图

本文相关源码获取方式&#xff1a;扫下方二维码&#xff0c;回复&#xff1a;ploty即可获取扫码回复&#xff1a;2021
获取最新学习资源


推荐大家关注两个公号

分享程序员生活、互联网资讯、理财复盘日记等

专注于Java学习分享&#xff0c;从零和你一起学Java

关注后回复【1024】

送上独家资料

◆◆◆

欢迎大家围观朋友圈&#xff0c;我的微信&#xff1a;pythonbrief

学习更多&#xff1a;
整理了我开始分享学习笔记到现在超过250篇优质文章&#xff0c;涵盖数据分析、爬虫、机器学习等方面&#xff0c;别再说不知道该从哪开始&#xff0c;实战哪里找了

点赞”传统美德不能丢 



推荐阅读
  • python中安装并使用redis相关的知识
    本文介绍了在python中安装并使用redis的相关知识,包括redis的数据缓存系统和支持的数据类型,以及在pycharm中安装redis模块和常用的字符串操作。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • macOS Big Sur全新设计大版本更新,10+个值得关注的新功能
    本文介绍了Apple发布的新一代操作系统macOS Big Sur,该系统采用全新的界面设计,包括图标、应用界面、程序坞和菜单栏等方面的变化。新系统还增加了通知中心、桌面小组件、强化的Safari浏览器以及隐私保护等多项功能。文章指出,macOS Big Sur的设计与iPadOS越来越接近,结合了去年iPadOS对鼠标的完善等功能。 ... [详细]
  • springboot启动不了_Spring Boot + MyBatis 多模块搭建教程
    作者:枫本非凡来源:www.cnblogs.comorzlinp9717399.html一、前言1、创建父工程最近公司项目准备开始重构,框 ... [详细]
  • 本文整理了Java中com.evernote.android.job.JobRequest.getTransientExtras()方法的一些代码示例,展示了 ... [详细]
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
  • uboot与linux驱动1.uboot本身是裸机程序(1)在裸机中本来是没有驱动概念的(狭义的驱动概念是指在操作系统中用来具体操控硬 ... [详细]
  • 人脸检测 pyqt+opencv+dlib
    一、实验目标绘制PyQT界面,调用摄像头显示人脸信息。在界面中,用户通过点击不同的按键可以实现多种功能:打开和关闭摄像头, ... [详细]
  • HTC EVO 4G+手机存储(SD卡)中各个文件夹功能说明(转载)
      HTCRider/X515E/EVO4G+手机存储(SD卡)中各个文件夹功能说明  HTCRider/X515E/EVO4G+  1、.android_s ... [详细]
author-avatar
手机用户2502902843
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有