python数据可视化方法和库

之前的文章中学习了matplotlib和seaborn两种可视化库,但是实际工作由于自身问题其实直接调用pandas的接口比较多(直接df.plot()),然而根据实际可能图片的要求进行一些legend和label的改动。并且并不熟练!
由于在网上看到许多酷炫的可视化图片以及动态图表的展示,因此此文主要为之后的数据分析可视化使用做一个参考。
目前可视化的库和网站很多,针对个人可能会用到:
1.在线编辑可视化图表和动态图了解有:
(1).Flourish,其是一个在线数据可视化网站,可以快速地把表格数据转化为各种好看的图表,并且他提供的Bar Chart Race(动态条形图)有一套完整的参数可供自己绘制自己想要的动态图。绘制完成后可以发布并且嵌入网页或PPT。(收费)
(2).Hanabi花火在线可视化工具,可以把动态条形图导出位GIF和MP4格式(免费)
(3).海致BDP同为在线可视化工具。(个人版免费)

2.python目前主要是Bokeh和pyecharts两个库。
Bokeh:
官网链接:bokeh.org/
GitHub链接:github.com/bokeh/bokeh(汉化:https://github.com/DonaldDai/Bokeh-CN)
pyecharts:
官网链接:https://pyecharts.org/#/zh-cn/intro
GitHub链接:https://github.com/pyecharts/pyecharts
待更新

在此针对pyecharts进行介绍以及日后使用。
pyecharts:转载地图绘制 官方文档:pyecharts
在此对pyecharts做一些介绍,主要参考文档以及相关大神博客参考博客
基本参数介绍:
add() 主要方法,用于添加图表的数据和设置各种配置项

show_config() 打印输出图表的所有配置项

render() 默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:my_first_chart.html"),文件用浏览器打开。

基本上所有的图表类型都是这样绘制的:
1.chart_name = Type() 初始化具体类型图表。
2.add() 加数据及配置项。
3.render() 生成 .html 文件。

柱状图:

from pyecharts.charts import Bar
from pyecharts import options as opts
bar = (
Bar()
    .add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
    .add_yaxis("商家A",[114, 55, 27, 101, 125, 27, 105])
    .add_yaxis("商家B",[57, 134, 137, 129, 145, 60, 49])
    .set_global_opts(title_opts = opts.TitleOpts(title = "某商场销售情况"))
)
bar.render(r"C:\Users\yunda\Desktop\11.html")


.reversal_axis()#横向柱状图,类似barh
import pyecharts.options as opts
from pyecharts.charts import Bar, Line

x_data = ["1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"]

bar = (
    Bar(init_opts=opts.InitOpts(width="1600px", height="800px"))
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="蒸发量",
        yaxis_data=[
            2.0,
            4.9,
            7.0,
            23.2,
            25.6,
            76.7,
            135.6,
            162.2,
            32.6,
            20.0,
            6.4,
            3.3,
        ],
        label_opts=opts.LabelOpts(is_show=False),
    )
    .add_yaxis(
        series_name="降水量",
        yaxis_data=[
            2.6,
            5.9,
            9.0,
            26.4,
            28.7,
            70.7,
            175.6,
            182.2,
            48.7,
            18.8,
            6.0,
            2.3,
        ],
        label_opts=opts.LabelOpts(is_show=False),
    )
    .extend_axis(
        yaxis=opts.AxisOpts(
            name="温度",
            type_="value",
            min_=0,
            max_=25,
            interval=5,
            axislabel_opts=opts.LabelOpts(formatter="{value} °C"),
        )
    )
    .set_global_opts(
        tooltip_opts=opts.TooltipOpts(
            is_show=True, trigger="axis", axis_pointer_type="cross"
        ),
        xaxis_opts=opts.AxisOpts(
            type_="category",
            axispointer_opts=opts.AxisPointerOpts(is_show=True, type_="shadow"),
        ),
        yaxis_opts=opts.AxisOpts(
            name="水量",
            type_="value",
            min_=0,
            max_=250,
            interval=50,
            axislabel_opts=opts.LabelOpts(formatter="{value} ml"),
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
        ),
    )
)

line = (
    Line()
    .add_xaxis(xaxis_data=x_data)
    .add_yaxis(
        series_name="平均温度",
        yaxis_index=1,
        y_axis=[2.0, 2.2, 3.3, 4.5, 6.3, 10.2, 20.3, 23.4, 23.0, 16.5, 12.0, 6.2],
        label_opts=opts.LabelOpts(is_show=False),
    )
)

bar.overlap(line).render("mixed_bar_and_line.html")

python数据可视化方法和库_第1张图片
词云:

import pyecharts.options as opts
from pyecharts.charts import WordCloud

data = [
    ("生活资源", "999"),
    ("供热管理", "888"),
    ("供气质量", "777"),
    ("生活用水管理", "688"),
    ("一次供水问题", "588"),
    ("交通运输", "516"),
    ("城市交通", "515"),
    ("环境保护", "483"),
    ("房地产管理", "462"),
    ("城乡建设", "449"),
    ("社会保障与福利", "429"),
    ("社会保障", "407"),
    ("文体与教育管理", "406"),
    ("公共安全", "406"),
    ("公交运输管理", "386"),
    ("出租车运营管理", "385"),
    ("供热管理", "375"),
    ("市容环卫", "355"),
    ("自然资源管理", "355"),
    ("粉尘污染", "335"),
    ("噪声污染", "324"),
    ("土地资源管理", "304"),
    ("物业服务与管理", "304"),
    ("医疗卫生", "284"),
    ("粉煤灰污染", "284"),
    ("占道", "284"),
    ("供热发展", "254"),
    ("农村土地规划管理", "254"),
    ("生活噪音", "253"),
    ("供热单位影响", "253"),
    ("城市供电", "223"),
    ("房屋质量与安全", "223"),
    ("大气污染", "223"),
    ("房屋安全", "223"),
    ("文化活动", "223"),
    ("拆迁管理", "223"),
    ("公共设施", "223"),
    ("供气质量", "223"),
    ("供电管理", "223"),
    ("燃气管理", "152"),
    ("教育管理", "152"),
    ("医疗纠纷", "152"),
    ("执法监督", "152"),
    ("设备安全", "152"),
    ("政务建设", "152"),
    ("县区、开发区", "152"),
    ("宏观经济", "152"),
    ("教育管理", "112"),
    ("社会保障", "112"),
    ("生活用水管理", "112"),
    ("物业服务与管理", "112"),
    ("分类列表", "112"),
    ("农业生产", "112"),
    ("二次供水问题", "112"),
    ("城市公共设施", "92"),
    ("拆迁政策咨询", "92"),
    ("物业服务", "92"),
    ("物业管理", "92"),
    ("社会保障保险管理", "92"),
    ("低保管理", "92"),
    ("文娱市场管理", "72"),
    ("城市交通秩序管理", "72"),
    ("执法争议", "72"),
    ("商业烟尘污染", "72"),
    ("占道堆放", "71"),
    ("地上设施", "71"),
    ("水质", "71"),
    ("无水", "71"),
    ("供热单位影响", "71"),
    ("人行道管理", "71"),
    ("主网原因", "71"),
    ("集中供热", "71"),
    ("客运管理", "71"),
    ("国有公交(大巴)管理", "71"),
    ("工业粉尘污染", "71"),
    ("治安案件", "71"),
    ("压力容器安全", "71"),
    ("身份证管理", "71"),
    ("群众健身", "41"),
    ("工业排放污染", "41"),
    ("破坏森林资源", "41"),
    ("市场收费", "41"),
    ("生产资金", "41"),
    ("生产噪声", "41"),
    ("农村低保", "41"),
    ("劳动争议", "41"),
    ("劳动合同争议", "41"),
    ("劳动报酬与福利", "41"),
    ("医疗事故", "21"),
    ("停供", "21"),
    ("基础教育", "21"),
    ("职业教育", "21"),
    ("物业资质管理", "21"),
    ("拆迁补偿", "21"),
    ("设施维护", "21"),
    ("市场外溢", "11"),
    ("占道经营", "11"),
    ("树木管理", "11"),
    ("农村基础设施", "11"),
    ("无水", "11"),
    ("供气质量", "11"),
    ("停气", "11"),
    ("市政府工作部门(含部门管理机构、直属单位)", "11"),
    ("燃气管理", "11"),
    ("市容环卫", "11"),
    ("新闻传媒", "11"),
    ("人才招聘", "11"),
    ("市场环境", "11"),
    ("行政事业收费", "11"),
    ("食品安全与卫生", "11"),
    ("城市交通", "11"),
    ("房地产开发", "11"),
    ("房屋配套问题", "11"),
    ("物业服务", "11"),
    ("物业管理", "11"),
    ("占道", "11"),
    ("园林绿化", "11"),
    ("户籍管理及身份证", "11"),
    ("公交运输管理", "11"),
    ("公路(水路)交通", "11"),
    ("房屋与图纸不符", "11"),
    ("有线电视", "11"),
    ("社会治安", "11"),
    ("林业资源", "11"),
    ("其他行政事业收费", "11"),
    ("经营性收费", "11"),
    ("食品安全与卫生", "11"),
    ("体育活动", "11"),
    ("有线电视安装及调试维护", "11"),
    ("低保管理", "11"),
    ("劳动争议", "11"),
    ("社会福利及事务", "11"),
    ("一次供水问题", "11"),
]


(
    WordCloud()
    .add(series_name="热点分析", data_pair=data, word_size_range=[6, 66])
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="热点分析", title_textstyle_opts=opts.TextStyleOpts(font_size=23)
        ),
        tooltip_opts=opts.TooltipOpts(is_show=True),
    )
    .render("basic_wordcloud.html")
)

python数据可视化方法和库_第2张图片

相关博客:链接
相关参数:链接
流向图参考:链接

由于对数据的处理主要依赖于pandas的库,因此在通过Pyecharts画图要遇到麻烦,可以使用eplotpandas中流畅的使用pyecharts

针对不同的图和函数(Bar(),Geo())其中的add里的参数等可以使用help(Geo.add)查看。

dir(pyecharts.globals.ChartType)
dir(pyecharts.globals.SymbolType)
help(Geo.add)

以下是最新版本代码参考:

from pyecharts.charts import Geo
from pyecharts import options as opts
import pyecharts
from pyecharts.globals import ChartType, SymbolType

c = (
        Geo()
        .add_schema(maptype="china")
        .add(
            "",
            [("深圳", 120), ("哈尔滨", 66), ("杭州", 77), ("重庆", 88), ("上海", 100), ("乌鲁木齐", 30),("北京", 30),("武汉",70)],
            type_=ChartType.EFFECT_SCATTER,
            color="green",
        )
        .add(
            "geo",
            [("北京", "上海"), ("武汉", "深圳"),("重庆", "杭州"),("哈尔滨", "重庆"),("乌鲁木齐", "哈尔滨"),("深圳", "乌鲁木齐"),("武汉", "北京")],
            type_=ChartType.LINES,
            effect_opts=opts.EffectOpts(
                symbol=SymbolType.ARROW, symbol_size=6, color="blue"
            ),
            linestyle_opts=opts.LineStyleOpts(curve=0.2),
        )
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(title_opts=opts.TitleOpts(title="全国主要城市航班路线和数量"))
    )

c.render(r"C:\Users\yunda\Desktop\11.html")

python数据可视化方法和库_第3张图片

from pyecharts import options as opts
from pyecharts.charts import Geo, Page
from pyecharts.globals import ChartType, SymbolType

#定义地理图
geo = Geo()
#设置画布宽度
geo.width = "800px"
#设置画布高度
geo.height = "600px"
#全局设置项
geo.set_global_opts(visualmap_opts = opts.VisualMapOpts(max_=100),
                    title_opts=opts.TitleOpts(title="Geo-流向图"))
#添加主题,中国地图,填充及边界颜色设置
geo.add_schema(
            maptype="china",
            itemstyle_opts=opts.ItemStyleOpts( border_color="#111", color="#454545"),
        )
#添加系列
geo.add(
            "",
            [("成都",10),("合肥",20),("宁波",30),("武汉",40),("西安",50),("郑州",60),("大连",70),("济南",80)],
            type_=ChartType.EFFECT_SCATTER,             #散点图的一种形式
            label_opts=opts.LabelOpts(is_show = True),   #不显示数值则设置为False
          #  color="red"
        )
geo.add(
            "",
            [("北京", 100), ("上海", 100)],
            type_=ChartType.HEATMAP,       #散点的另一种形式
            label_opts=opts.LabelOpts(is_show=False)
        )
#设置流向
geo.add(
            "流向图",
            [("上海","成都"),("上海","合肥"),("上海","宁波"),("上海","武汉"),("上海","西安"),("北京","郑州"),("北京","大连"),("北京","济南")],
            type_=ChartType.LINES,
            linestyle_opts=opts.LineStyleOpts(curve=0.3,color="#63B8FF"),   #基本线条的弯曲程度及颜色,英文及RGB都行
            effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW, symbol_size=6, color="#FF7F00")  # 流向线条的形式、颜色
        )
#生成图片
geo.render(r"C:\Users\yunda\Desktop\22.html")

python数据可视化方法和库_第4张图片

你可能感兴趣的:(python数据可视化方法和库)