之前的文章中学习了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")
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")
)
相关博客:链接
相关参数:链接
流向图参考:链接
由于对数据的处理主要依赖于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")
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")