生信图可视化大全可视化

可视化神器Plotly--Express详细教程

2019-07-10  本文已影响119人  惑也

参考资料:Plotly_express官方API教程Plotly_express官方画图教程

一、概述

Plotly 是新一代的数据可视化神器,TopQ量化开源团队,虽然plotly功能强大,却一直没有得到广泛应用,大部分py开发人员,还在使用陈旧的matplotlib,其中最重要的原因,就是plotly的设置过于繁琐。为此,plotly推出了其简化接口:Plotly Express,简称:px。

Plotly Express是对 Plotly.py 的高级封装,采用ROR等新一代“约定优先”编程模式,内置了大量实用、现代的绘图模板,用户只需调用简单的API函数,即可快速生成漂亮的互动图表。

Plotly Express内置的图表组合,涵盖了90%常用的绘图需要,Python画图,首推Plotly Express,毫无疑问。

二、图表说明

  1. scatter:散点图
    在散点图中,每行data_frame由2D空间中的符号标记表示;

  2. scatter_3d:三维散点图
    在3D散点图中,每行data_frame由3D空间中的符号标记表示;

  3. scatter_polar:极坐标散点图
    在极坐标散点图中,每行data_frame由极坐标中的符号标记表示;

  4. scatter_ternary:三元散点图
    在三元散点图中,每行data_frame由三元坐标中的符号标记表示;

  5. scatter_mapbox:地图散点图
    在Mapbox散点图中,每一行data_frame都由Mapbox地图上的符号标记表示;

  6. scatter_geo:地理坐标散点图
    在地理散点图中,每一行data_frame都由地图上的符号标记表示;

  7. scatter_matrix:矩阵散点图
    在散点图矩阵(或SPLOM)中,每行data_frame由多个符号标记表示,在2D散点图的网格的每个单元格中有一个,其将每对dimensions彼此相对绘制;

  8. density_contour:密度等值线图(双变量分布)
    在密度等值线图中,行data_frame被组合在一起,成为轮廓标记,以可视化该值的聚合函数histfunc(例如:计数或总和)的2D分布z;

  9. density_heatmap:密度热力图(双变量分布)
    在密度热图中,行data_frame被组合在一起,成为彩色矩形瓦片,以可视化该值的聚合函数histfunc(例如:计数或总和)的2D分布 z;

  10. line:线条图
    在2D线图中,每行data_frame表示为2D空间中折线标记的顶点;

  11. line_polar:极坐标线条图
    在极线图中,每行data_frame表示为极坐标中折线标记的顶点;

  12. line_ternary:三元线条图
    在三元线图中,每行data_frame表示为三元坐标中折线标记的顶点;

  13. line_mapbox:地图线条图
    在Mapbox线图中,每一行data_frame表示为Mapbox地图上折线标记的顶点;

  14. line_geo:地理坐标线条图
    在地理线图中,每一行data_frame表示为地图上折线标记的顶点;

  15. parallel_coordinates:平行坐标图
    在平行坐标图中,每行data_frame由折线标记表示,该折线标记穿过一组平行轴,每个平行轴对应一个平行轴 dimensions;

  16. parallel_categories:并行类别图
    在并行类别(或平行集)图中,每行data_frame与其他共享相同值的行组合,dimensions然后通过一组平行轴绘制为折线标记,每个平行轴对应一个dimensions;

  17. area:堆积区域图
    在堆积区域图中,每行data_frame表示为2D空间中折线标记的顶点。连续折线之间的区域被填充;

  18. bar:条形图
    在条形图中,每行data_frame表示为矩形标记;

  19. bar_polar:极坐标条形图
    在极坐标条形图中,每一行都data_frame表示为极坐标中的楔形标记;

  20. violin:小提琴图
    在小提琴图中,将data_frame每一行分组成一个曲线标记,以便可视化它们的分布;

  21. box:箱形图
    在箱形图中,data_frame的每一行被组合在一起成为盒须标记,以显示它们的分布;

  22. strip:长条图
    在长条图中,每一行data_frame表示为类别中的抖动标记;

  23. histogram:直方图
    在直方图中,每一行data_frame被组合在一起成为矩形标记,以可视化该值的聚合函数histfunc(例如,计数或总和)的1D分布y(或者x,如果orientation是'h'时);

  24. choropleth:等高(值)区域地图
    在等值区域图中,每行data_frame由地图上的彩色区域标记表示;

三、子模块

import numpy as np
import pandas as pd
import plotly_express as px

1. 内置数据集

gapminder = px.data.gapminder() 
tips = px.data.tips()  
iris = px.data.iris()  
wind = px.data.wind()        
election = px.data.election() 
carshare = px.data.carshare()

2. 内置颜色面板

px.colors.carto
px.colors.cmocean
px.colors.colorbrewer
px.colors.cyclical 
px.colors.diverging     
px.colors.qualitative
px.colors.sequential        
px.colors.qualitative.swatches() 

四、 散点图

1. 方法定义
def scatter(data_frame, x=None, y=None, color=None, symbol=None, size=None, 
            hover_name=None, hover_data=None, text=None, facet_row=None, 
            facet_col=None, error_x=None, error_x_minus=None, error_y=None, 
            error_y_minus=None, animation_frame=None, animation_group=None, 
            category_orders={}, labels={}, color_discrete_sequence=None, 
            color_discrete_map={}, color_continuous_scale=None, 
            range_color=None, color_continuous_midpoint=None, 
            symbol_sequence=None, symbol_map={}, opacity=None,
            size_max=None, marginal_x=None, marginal_y=None, trendline=None,
            trendline_color_override=None, log_x=False, log_y=False,
            range_x=None, range_y=None, render_mode='auto', title=None, 
            template=None, width=None, height=None):

    return
2. 参数说明
3. 说明

五、 图表制作

1. 散点图和折线图

px.scatter(iris, x="sepal_width", y="sepal_length")
px.scatter(iris, x="sepal_width", y="sepal_length", color="species")
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           marginal_y="rug", marginal_x="histogram")
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           marginal_y="violin", marginal_x="box", trendline="ols")
iris["e"] = iris["sepal_width"]/100   --设置误差值、删除误差值:del iris["e"] 
px.scatter(iris, x="sepal_width", y="sepal_length", color="species", 
           error_x="e", error_y="e")
px.scatter(tips, x="total_bill", y="tip", facet_row="time", facet_col="day", 
           color="smoker", trendline="ols",category_orders={"day": ["Thur", 
           "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
px.scatter(tips, x="total_bill", y="tip", color="size", facet_col="sex",
           color_continuous_scale=px.colors.sequential.Viridis, 
           render_mode="webgl")
px.scatter(gapminder.query("year==2007"), x="gdpPercap", y="lifeExp", 
           size="pop", color="continent",hover_name="country", log_x=True, 
           size_max=60)
px.scatter(gapminder, x="gdpPercap", y="lifeExp", animation_frame="year", 
           animation_group="country", size="pop", color="continent", 
           hover_name="country", facet_col="continent",log_x=True, 
           size_max=45, range_x=[100,100000], range_y=[25,90])
px.scatter_matrix(iris)
px.scatter_matrix(iris, dimensions=["sepal_width", "sepal_length", 
                  "petal_width", "petal_length"], color="species")
px.parallel_coordinates(iris, color="species_id", labels={"species_id": 
            "Species", "sepal_width": "Sepal Width", "sepal_length": 
            "Sepal Length",  "petal_width": "Petal Width", "petal_length": 
            "Petal Length"},color_continuous_scale=px.colors.diverging.
            Tealrose, color_continuous_midpoint=2)
px.parallel_categories(tips, color="size", color_continuous_scale=px.
            colors.sequential.Inferno)
px.line(gapminder, x="year", y="lifeExp", color="continent", 
        line_group="country", hover_name="country",
        line_shape="spline", render_mode="svg")
px.area(gapminder, x="year", y="pop", color="continent", 
        line_group="country")

2. 可视化分布

px.density_contour(iris, x="sepal_width", y="sepal_length")
px.density_contour(iris, x="sepal_width", y="sepal_length", color="species", 
                   marginal_x="rug", marginal_y="histogram")
px.density_heatmap(iris, x="sepal_width", y="sepal_length", 
                   marginal_x="rug", marginal_y="histogram")
px.bar(tips, x="sex", y="total_bill", color="smoker", barmode="group")
px.bar(tips, x="sex", y="total_bill", color="smoker", barmode="group", 
       facet_row="time", facet_col="day", category_orders={"day": ["Thur", 
       "Fri", "Sat", "Sun"], "time": ["Lunch", "Dinner"]})
px.histogram(tips, x="total_bill", y="tip", color="sex", marginal="rug", 
             hover_data=tips.columns)
px.histogram(tips, x="sex", y="tip", histfunc="avg", color="smoker", 
             barmode="group", facet_row="time", facet_col="day", 
             category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], 
             "time": ["Lunch", "Dinner"]})
px.strip(tips, x="total_bill", y="time", orientation="h", color="smoker")
px.box(tips, x="day", y="total_bill", color="smoker", notched=True)
px.violin(tips, y="tip", x="smoker", color="sex", box=True, points="all", 
          hover_data=tips.columns)

3. 三元坐标

px.scatter_ternary(election, a="Joly", b="Coderre", c="Bergeron", color="winner", size="total", hover_name="district",
                   size_max=15, color_discrete_map = {"Joly": "blue", 
                   "Bergeron": "green", "Coderre":"red"} )
px.line_ternary(election, a="Joly", b="Coderre", c="Bergeron", color="winner", 
                line_dash="winner")

4. 3D坐标

px.scatter_3d(election, x="Joly", y="Coderre", z="Bergeron", color="winner", 
              size="total", hover_name="district",symbol="result", 
              color_discrete_map = {"Joly": "blue", "Bergeron": "green", 
              "Coderre":"red"})

5. 极坐标

px.scatter_polar(wind, r="value", theta="direction", color="strength", 
            symbol="strength",color_discrete_sequence=px.colors.sequential.
            Plotly[-2::-1])
px.line_polar(wind, r="value", theta="direction", color="strength", 
            line_close=True,color_discrete_sequence=px.colors.sequential.Plotly[-2::-1])
px.bar_polar(wind, r="value", theta="direction", color="strength", template="plotly_dark",
            color_discrete_sequence= px.colors.sequential.Plotly[-2::-1])

6. 地图

px.scatter_geo(gapminder, locations="iso_alpha", color="continent", hover_name="country", size="pop",
               animation_frame="year", projection="natural earth")
px.line_geo(gapminder.query("year==2007"), locations="iso_alpha", 
            color="continent", projection="orthographic")
px.choropleth(gapminder, locations="iso_alpha", color="lifeExp", 
             hover_name="country", animation_frame="year",color_continuous_scale=px.colors.sequential.Plasma, range_color=[20,80])

六、 Plotly生态

  1. Plotly.py 已经发展成为一个非常强大的可视化交互工具,它可以让你控制图形的几乎每个方面,从图例的位置到刻度的长度。推出 Plotly Express 的主要目标是使 Plotly.py 更容易用于探索和快速迭代;

  2. 对于Plotly 生态系统,一旦使用 Plotly Express 创建了一个图形,就可以使用Themes,使用 FigureWidgets 进行命令性编辑,使用 Orca 将其导出为几乎任何文件格式,或者在 GUI JupyterLab 图表编辑器中编辑它;

  3. 主题(Themes)允许控制图形范围的设置,如边距、字体、背景颜色、刻度定位等,也可以使用模板参数,应用任何命名的主题或主题对象;

  4. Plotly_express 的输出,继承自 Plotly.py 的 Figure 类 ExpressFigure 的对象,这意味着可以使用任何 Figure 的访问器和方法,来改变 px 生成的图表,通常借助于 .update() 函数来调用;

  5. demo:对Plotly_express生成的图表,设置标记类型、坐标轴标签名称、坐标轴刻度倾斜角度、显示坐标轴线、坐标轴刻度间隔等;

# 选取2个国家:中国、阿富汗
country_list = ["China", "Afghanistan"]    
tem_gapminder = gapminder.query("country == @country_list")

fig = px.line(tem_gapminder, x="year", y="lifeExp", color="country", 
              width=1000, height=400, title="国家人均寿命", template="", 
              line_shape="spline", line_dash="country")
# 选取2个国家:中国、阿富汗
country_list = ["China", "Afghanistan"]    
tem_gapminder = gapminder.query("country == @country_list")

fig = px.line(tem_gapminder, x="year", y="lifeExp", color="country", 
              width=1000, height=400, title="国家人均寿命", template="", 
              line_shape="spline", line_dash="country")

# 修改时添加的代码
fig.update_traces(dict(mode="markers+lines"))
fig.update(layout=dict(xaxis=dict(title="年份", tickangle=-30, 
                       showline=True, nticks=20),
                       yaxis=dict(title="人均寿命", showline=True)))



Plotly Express 作为一个新的 Python 可视化库,在 Plotly 生态系统下,将会迅速发展,所以不要犹豫,立即开始使用 Plotly Express 吧!

上一篇下一篇

猜你喜欢

热点阅读