从官网的例子中整理、合并的
from pyecharts.globals import CurrentConfig, OnlineHostType
CurrentConfig.ONLINE_HOST = OnlineHostType.NOTEBOOK_HOST
柱形图常用基本设置
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode # 背景图片用
# 设置容器大小,使用的主题
bar = Bar(init_opts=opts.InitOpts(
width='850px', height='350px',
# 使用主题
theme=ThemeType.ESSOS,
# 背景颜色/图片
bg_color='black'/{"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"}
))
# 添加x轴数据
bar.add_xaxis(list型的)
# 添加y轴数据
bar.add_yaxis(series_name='第一个系列的名称',list型的第一个系列的数据,
# 是否要堆叠,
stack='stack0'/'stack1'/'stack',
# 系列颜色
color='red'/'#CC33FF',
# 该系列不显示标签
label_opts=opts.LabelOpts(is_show=False),
# 不同类别(同系列)柱间间隔;同类(不同系列)柱间间隔
category_gap='15%', gap='5%',
# 使用哪个y轴
yaxis_index=0,
)
# 添加y轴,第2个y轴的设置
bar.extend_axis(yaxis_opts=opts.AxisOpts(
name='新增y轴名称', type_='value'/'category'/'time'
min_=, max_=, interval=,position='left'/'right',offset=,
axislabel_opts=opts.LabelOpts(formatter='{value}/元')
))
# 全局设置
bar.set_global_opts(title_opts=, datazoom_opts=opts.DataZoomOpts(),
# x轴标签旋转
xaxis_opts=opts.AxisOpts(name='',axislabel_opts=opts.LabelOpts(rotate=-15)),
# 第1个y轴的设置
yaxis_opts=opts.AxisOpts(name='', ))
# 设置所有系列
bar.set_series_opts(
# 所有系列的标签都不显示
label_opts=opts.LabelOpts(is_show=False),
# 设置标记点和标记线
markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(type_='max', name='最高值'),opts.MarkPointItem(type_='min', name='最低值')]
),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(type_='average', name='平均值')]
)
)
# 交换轴成条形图
bar.reversal_axis()
# 在src中设置图片地址
bar.add_js_funcs(
"""
var img = new Image(); img.src = 'https://hbimg.huabanimg.com/3ec361f4774ff0efede19eb326df31aad331b673be714-C5MS3e';
"""
)
import pandas as pd
import numpy as np
data = pd.DataFrame(np.random.randint(20,50,(50,3)), columns=['A','B','C'], index=pd.period_range('2020/5/10',periods=50,freq='D'))
data.head()
A B C
2020-05-10 40 31 48
2020-05-11 49 28 30
2020-05-12 40 21 42
2020-05-13 30 21 33
2020-05-14 48 34 40
1 堆叠柱形图
-使用主题
-添加区域选择组件按钮
-x轴的区域缩放
-坐标轴标签旋转
from pyecharts.charts import Bar
from pyecharts import options as opts
from pyecharts.globals import ThemeType
bar1 = Bar(init_opts=opts.InitOpts(width='850px', height='350px', theme=ThemeType.ESSOS))
bar1.add_xaxis(data.index.strftime('%m-%d').tolist()) # 要显示在x轴上的数据
bar1.add_yaxis('A', data['A'].tolist(),stack='stack')# 显示堆积的时候加上这个参数
bar1.add_yaxis('B', data['B'].tolist(),stack='stack')
bar1.add_yaxis('C', data['C'].tolist(),stack='stack')
bar1.set_global_opts(title_opts={'text':'堆积-主题-区域选择-缩放','subtext':'dict配置'},
brush_opts=opts.BrushOpts(tool_box=['rect','clear'], # 添加区域选择组件按钮
brush_link=[0,2]), # 0对应A,1是C,选择A系列,C也会选中
datazoom_opts=opts.DataZoomOpts(), # x轴的区域缩放
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15))# 坐标轴标签旋转
)
bar1.render_notebook()
2 双坐标轴
-柱间距离
-两个堆叠,一个不堆叠
-两个y坐标轴的刻度、名称、标签
-标签可以是:bar.set_series_opts(label_opts=opts.LabelOpts())全部设置,
也可以在add_yaxis(label_opts=xx)单独为每一个系列设置
from pyecharts.charts import Line
bar = Bar(init_opts=opts.InitOpts(height='350px', width='950px', theme=ThemeType.VINTAGE))
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('A市', data['A'].tolist(),stack='stack0',category_gap='15%',gap='5%') #柱间距离:同一系列(不同天的),不同系列(同一天的)
bar.add_yaxis('B市', data['B'].tolist(),stack='stack0')
bar.add_yaxis('C市', (data['C']+30).tolist())
# 添加次坐标轴
bar.extend_axis(yaxis=opts.AxisOpts(name='全省', type_='value', min_=0, max_=180, interval=30,
axislabel_opts=opts.LabelOpts(formatter='{value} 万元')# 坐标轴标签格式
)
)
bar.set_global_opts(title_opts={'text':'双坐标轴'},
xaxis_opts=opts.AxisOpts(
name='时间',
axislabel_opts=opts.LabelOpts(rotate=-15)),
yaxis_opts=opts.AxisOpts(name='市级'), # 主坐标轴设置
datazoom_opts=opts.DataZoomOpts(),
)
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
line = Line()
line.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
line.add_yaxis('全省', y_axis=data.sum(1).tolist(),
yaxis_index=1, # 使用第二个轴
label_opts=opts.LabelOpts(is_show=False),
linestyle_opts=opts.LineStyleOpts(width=1, color='black'))
bar.overlap(line).render_notebook()
3 图片背景
-系列颜色设置 -分割线 -标记点、标记线显示
from pyecharts.commons.utils import JsCode
bar = Bar(init_opts=opts.InitOpts(width='720px', height='450px', # 注意图的大小,这里并没有完全展示图片
# 使用图片背景
bg_color={"type": "pattern", "image": JsCode("img"), "repeat": "no-repeat"}
)
)
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist()) # 要显示在x轴上的数据
bar.add_yaxis('', data['A'].tolist(), color='#009999') # 系列颜色
bar.set_global_opts(title_opts={'text':'背景图片-分割线-标记'},
yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),# 网格分割线
)
bar.set_series_opts(markpoint_opts=opts.MarkPointOpts(
data=[opts.MarkPointItem(type_='max', name='最高值'),
opts.MarkPointItem(type_='min', name='最低值'),
]
),
markline_opts=opts.MarkLineOpts(
data=[
opts.MarkLineItem(type_='average', name='平均值')
]))
# 在src中设置图片地址
bar.add_js_funcs(
"""
var img = new Image(); img.src = 'https://hbimg.huabanimg.com/3ec361f4774ff0efede19eb326df31aad331b673be714-C5MS3e';
"""
)
bar.render_notebook()
4 直方图-使用BarItem逐条添加
-可以设置每个条形的样式
y = []
x =[]
color=['#009999','#33CCCC','#66CCCC','#66FFCC','#CCFF99','#99FF66','#99FF00']
for i,j in zip((data.index.strftime('%m-%d')[:7]).tolist(),color):
x.append(i)
y.append(opts.BarItem(name=i, value=np.random.randint(10,20), itemstyle_opts=opts.ItemStyleOpts(color=j)))
bar = Bar(init_opts=opts.InitOpts(height='350px', width='850px'))
bar.add_xaxis(x)
bar.add_yaxis('', y, category_gap=0) # 间隔=0,直方图
bar.set_global_opts(title_opts=opts.TitleOpts(title='使用BarItem逐条添加'))
bar.render_notebook()
5 多重y轴
-提示工具
-bar的系列颜色:官网中直接设置的color参数,但柱形颜色和轴颜色没有对应,需要在itemstyle_opts中设置
itemstyle_opts=opts.ItemStyleOpts
from pyecharts.charts import Line,Bar
from pyecharts import options as opts
colors=['#009999','#33CCCC','#d14a61']
line = Line(init_opts=opts.InitOpts(width='950px', height='350px'))
line.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
line.add_yaxis('价格', data['A'].tolist(),yaxis_index=0, color=colors[0], label_opts=opts.LabelOpts(is_show=False))
line.extend_axis(
yaxis=opts.AxisOpts(type_='value', name='销量',
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[1])),
position='right'
)
)
line.extend_axis(
yaxis=opts.AxisOpts(type_='value', name='库存量',
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[2])),
position='right',offset=50
)
)
line.set_global_opts(
yaxis_opts=opts.AxisOpts(
type_='value', name='价格',
axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color=colors[0])),
position='left',
splitline_opts=opts.SplitLineOpts(is_show=True)
),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"), # 提示组件交叉型
datazoom_opts=opts.DataZoomOpts()
)
bar = Bar()
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('销量', data['B'].tolist(), yaxis_index=1, itemstyle_opts=opts.ItemStyleOpts(color=colors[1]))
bar.add_yaxis('库存量', data['C'].tolist(), yaxis_index=2, itemstyle_opts=opts.ItemStyleOpts(color=colors[2]))
bar.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
line.overlap(bar).render_notebook()
6 条形图-交换轴
-y轴的区域缩放
-取消默认显示某系列(需要加上系列名称)
data.index.strftime('%m-%d').tolist()
bar = Bar(init_opts=opts.InitOpts(width='850px', height='350px'))
bar.add_xaxis(xaxis_data=data.index.strftime('%m-%d').tolist())
bar.add_yaxis('A',data['A'].tolist(),label_opts=opts.LabelOpts(position='right'))
bar.add_yaxis('B',data['B'].tolist(),label_opts=opts.LabelOpts(position='right'),
is_selected=False)
bar.reversal_axis()
bar.set_global_opts(datazoom_opts=opts.DataZoomOpts(orient='vertical'))
bar.render_notebook()
7 添加时间轴的
pie+bar
from pyecharts.charts import Timeline,Pie
def get_overlap(i):
bar = Bar(init_opts=opts.InitOpts(width='850px', height='350px'))
bar.add_xaxis(xaxis_data=data.columns.tolist())
bar.add_yaxis('A市', data.loc[i].tolist(), itemstyle_opts=opts.ItemStyleOpts(color='#CCFF99'))
bar.add_yaxis('B市', (data.loc[i]*np.random.rand(3)+0.5).astype(int).tolist(),itemstyle_opts=opts.ItemStyleOpts(color='#009999'))
bar.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger='axis', axis_pointer_type='shadow'))
pie = Pie()
pie.add('全省占比', data_pair=[
['18岁以下', (data.loc[i]/data.loc[i].sum())[0]],
['18-60', (data.loc[i]/data.loc[i].sum())[1]],
['60以上', (data.loc[i]/data.loc[i].sum())[2]],
],
center=['80%', '30%'],
radius='30%')
pie.set_global_opts(tooltip_opts=opts.TooltipOpts(is_show=True, trigger='item'))
return bar.overlap(pie)
timeline = Timeline(init_opts=opts.InitOpts(width='850px', height='350px'))
for i in data.index:
timeline.add(get_overlap(i), time_point=i.strftime('%m-%d'))
# timeline.add_schema(is_auto_play=True, play_interval=1000) 自动播放
timeline.add_schema(is_auto_play=False)
timeline.render_notebook()