Pyecharts
什么是pyecharts
pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒。
pyecharts的github地址在这里:https://github.com/pyecharts/pyecharts
安装
pyecharts
python3.6版本以上就能使用V1版本了,并且V1和V0.5x版本不兼容(V0.5x版本已不再维护),所以我这边直接装的V1以上版本
pip安装
sudo pip install pyecharts -U
pyecharts做出的图是以html格式保存的,如果想以图片的形式进行保存,还需要装下面的库和插件:
snapshot_selenium
用于保存图片
pip安装
sudo pip3.7 install snapshot_selenium
chromedriver
因为我使用的是chrome浏览器,所以就装的chromedriver,其他浏览器也有相应的webdriver
如果装了谷歌浏览器,那输入下面命令:
google-chrome -version
然后可以看到对应的谷歌版本,比如我就是Google Chrome 69.0.3497.92
,然后就可以下载对应的版本了http://npm.taobao.org/mirrors/chromedriver/,点一个版本进去,然后里面有一个notes.txt文件,上面会显示该driver版本适用于哪些版本的浏览器,找到符合自己的,下载即可
比如我,是2.42版本:
wget -N http://chromedriver.storage.googleapis.com/2.42/chromedriver_linux64.zip
将下载下来的压缩包解压,然后输入以下:
sudo mv chromedriver /usr/bin
ll /usr/bin/chromedriver
ok了
Github Demo
先试跑一下github上给出的代码。
也就是这一份:
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本开始支持链式调用
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()
会生成一个html文件,浏览器打开后,如下所示:
(关于Ubuntu下如何录制gif动图:https://blog.youkuaiyun.com/qq_41433316/article/details/103917149)
下面是生成图片的demo:
from snapshot_selenium import snapshot as driver
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.render import make_snapshot
def bar_chart() -> Bar:
c = (
Bar()
.add_xaxis(["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"])
.add_yaxis("商家A", [114, 55, 27, 101, 125, 27, 105])
.add_yaxis("商家B", [57, 134, 137, 129, 145, 60, 49])
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(position="right"))
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-测试渲染图片"))
)
return c
# 需要安装 snapshot-selenium 或者 snapshot-phantomjs
make_snapshot(driver, bar_chart().render(), "bar.png")
Demo看完后,下面就是进一步的学习了
图表
先给出学习教程:https://pyecharts.org/#/zh-cn/
以及要知晓pyecharts给出的图表类型:
名称 | 说明 | 名称 | 说明 | 名称 | 说明 |
---|---|---|---|---|---|
Bar | 柱状图/条形图 | Bar3D | 3D 柱状图 | Boxplot | 箱形图 |
EffectScatter | 带有涟漪特效动画的散点图 | Funnel | 漏斗图 | Gauge | 仪表盘 |
Geo | 地理坐标系 | Graph | 关系图 | HeatMap | 热力图 |
Kline | K线图 | Line | 折线/面积图 | Line3D | 3D 折线图 |
Liquid | 水球图 | Map | 地图 | Parallel | 平行坐标系 |
Pie | 饼图 | Polar | 极坐标系 | Radar | 雷达图 |
Sankey | 桑基图 | Scatter | 散点图 | Scatter3D | 3D 散点图 |
ThemeRiver | 主题河流图 | WordCloud | 词云图 |
此外,用户可自定义图表类型:
- Grid 类:并行显示多张图
- Overlap 类:结合不同类型图表叠加画在同张图上
- Page 类:同一网页按顺序展示多图
- Timeline 类:提供时间线轮播多张图
直角坐标系图表
Bar:柱状图/条形图
新增X轴数据:
def add_xaxis(
# X 轴数据项
xaxis_data: Sequence
)
新增Y轴数据:
def add_yaxis(
# 系列名称,用于 tooltip 的显示,legend 的图例筛选。
series_name: str,
# 系列数据
yaxis_data: Sequence[Numeric, opts.BarItem, dict],
# 是否选中图例
is_selected: bool = True,
# 使用的 x 轴的 index,在单个图表实例中存在多个 x 轴的时候有用。
xaxis_index: Optional[Numeric] = None,
# 使用的 y 轴的 index,在单个图表实例中存在多个 y 轴的时候有用。
yaxis_index: Optional[Numeric] = None,
# 系列 label 颜色
color: Optional[str] = None,
# 数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置。
stack: Optional[str] = None,
# 同一系列的柱间距离,默认为类目间距的 20%,可设固定值
category_gap: Union[Numeric, str] = "20%",
# 不同系列的柱间距离,为百分比(如 '30%',表示柱子宽度的 30%)。
# 如果想要两个系列的柱子重叠,可以设置 gap 为 '-100%'。这在用柱子做背景的时候有用。
gap: Optional[str] = None,
# 标签配置项,参考 `series_options.LabelOpts`
label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),
# 标记点配置项,参考 `series_options.MarkPointOpts`
markpoint_opts: Union[opts.MarkPointOpts, dict, None] = None,
# 标记线配置项,参考 `series_options.MarkLineOpts`
markline_opts: Union[opts.MarkLineOpts, dict, None] = None,
# 提示框组件配置项,参考 `series_options.TooltipOpts`
tooltip_opts: Union[opts.TooltipOpts, dict, None] = None,
# 图元样式配置项,参考 `series_options.ItemStyleOpts`
itemstyle_opts: Union[opts.ItemStyleOpts, dict, None] = None,
)
def set_global_opts 全局配置设置
鉴于那个教程里面写的很全,所以这边我只贴几个我觉得可能比较常用的:
首先是导入的模块:
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
#pyecharts提供的数据,用自己数据作图可不导入该模块:
from pyecharts.faker import Faker
# 如果要保存为图片:
from snapshot_selenium import snapshot as driver
from pyecharts.render import make_snapshot
基本示例
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.add_yaxis("商家B", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本示例", subtitle="我是副标题"))
)
return c
bar_base().render('基本示例.html')
结果图就是demo的结果
背景图
def bar_base_with_custom_background_image() -> Bar:
c = (
Bar(
init_opts=opts.InitOpts(
bg_color={
"type": "pattern",
"image": JsCode("img"),
"repeat": "no-repeat",
}
)
)
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())