赞
踩
pyecharts水球图
⽔球图的取值 [0.67, 0.30, 0.15]表⽰下图中的 三个波浪线 ,⼀般代表三个百分⽐:
from pyecharts import options as opts
from pyecharts.charts import Liquid, Page
from pyecharts.globals import SymbolType
def liquid() -> Liquid:
c = (
Liquid()
.add("lq", [0.67, 0.30, 0.15])
.set_global_opts(title_opts=opts.TitleOpts(title="Liquid"))
)
return c
liquid().render('C:/jupyter_notebook/venv_env/myhtml/liquid.html')
from pyecharts import options as opts
from pyecharts.charts import Pie
from random import randint
def pie_base() -> Pie:
c = (
Pie()
.add("", [list(z) for z in zip(['宝马', '法拉利', '奔驰', '奥迪', '⼤众',
'丰⽥', '特斯拉'],
[randint(1, 20) for _ in range(7)])])
.set_global_opts(title_opts=opts.TitleOpts(title="Pie-基本⽰例"))
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}"))
)
return c
pie_base().render('C:/jupyter_notebook/venv_env/myhtml/pie_pyecharts.html')
pyecharts极坐标图
极坐标表⽰为 (夹⾓,半径) ,如(6,94)表⽰夹⾓为6,半径94的点:
import random
from pyecharts import options as opts
from pyecharts.charts import Page, Polar
def polar_scatter0() -> Polar:
data = [(alpha, random.randint(1, 100)) for alpha in range(101)] # r =random.randint(1, 100)
print(data)
c = (
Polar()
.add("", data, type_="bar", label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="Polar"))
)
return c
polar_scatter0().render('C:/jupyter_notebook/venv_env/myhtml/polar.html')
pyecharts词云图
(“C”,65)表⽰在本次统计中C语⾔出现65次:
from pyecharts import options as opts from pyecharts.charts import Page, WordCloud from pyecharts.globals import SymbolType words = [ ("Python", 100), ("C++", 80), ("Java", 95), ("R", 50), ("JavaScript", 79), ("C", 65) ] def wordcloud() -> WordCloud: c = ( WordCloud() # word_size_range: 单词字体⼤⼩范围 .add("", words, word_size_range=[20, 100], shape='cardioid') .set_global_opts(title_opts=opts.TitleOpts(title="WordCloud")) ) return c wordcloud().render('C:/jupyter_notebook/venv_env/myhtml/wordcloud.html')
pyecharts系列柱状图
from pyecharts import options as opts
from pyecharts.charts import Bar
from random import randint
def bar_series() -> Bar:
c = (
Bar()
.add_xaxis(['宝马', '法拉利', '奔驰', '奥迪', '⼤众', '丰⽥', '特斯拉'])
.add_yaxis("销量", [randint(1, 20) for _ in range(7)])
.add_yaxis("产量", [randint(1, 20) for _ in range(7)])
.set_global_opts(title_opts=opts.TitleOpts(title="Bar的主标题",
subtitle="Bar的副标题"))
)
return c
bar_series().render('C:/jupyter_notebook/venv_env/myhtml/bar_series.html')
pyecharts热力图
热⼒图描述的实际是三维关系,x轴表⽰车型,y轴表⽰国家,每个⾊块的颜⾊值代表销量,颜⾊刻度尺 显⽰在左下⾓,颜⾊越红表⽰销量越⼤。
import random from pyecharts import options as opts from pyecharts.charts import HeatMap def heatmap_car() -> HeatMap: x = ['宝马', '法拉利', '奔驰', '奥迪', '⼤众', '丰⽥', '特斯拉'] y = ['中国','⽇本','南⾮','澳⼤利亚','阿根廷','阿尔及利亚','法国','意⼤利','加拿⼤'] value = [[i, j, random.randint(0, 100)] for i in range(len(x)) for j in range(len(y))] c = ( HeatMap() .add_xaxis(x) .add_yaxis("销量", y, value) .set_global_opts( title_opts=opts.TitleOpts(title="HeatMap"), visualmap_opts=opts.VisualMapOpts(), ) ) return c heatmap_car().render('C:/jupyter_notebook/venv_env/myhtml/heatmap_pyecharts.html')
matplotlib绘制动画
matplotlib是python中最经典的绘图包,⾥⾯ animation模块能绘制动画。
# 导入模块 from matplotlib import pyplot as plt from matplotlib import animation from random import randint, random # ⽣成数据, frames_count是帧的个数, data_count每个帧的柱⼦个数 class Data: data_count = 32 frames_count = 2 def __init__(self, value): self.value = value self.color = (0.5, random(), random()) #rgb # 造数据 @classmethod def create(cls): return [[Data(randint(1, cls.data_count)) for _ in range(cls.data_count)] for frame_i in range(cls.frames_count)] # 绘制动画: animation.FuncAnimation函数的回调函数的参数 fi表⽰第⼏帧,注意要调⽤axs.cla()清除上⼀帧。 def draw_chart(): fig = plt.figure(1, figsize=(16, 9)) axs = fig.add_subplot(111) axs.set_xticks([]) axs.set_yticks([]) # ⽣成数据 frames = Data.create() def animate(fi): axs.cla() # clear last frame axs.set_xticks([]) axs.set_yticks([]) return axs.bar(list(range(Data.data_count)), # X [d.value for d in frames[fi]], # Y 1, # width color=[d.color for d in frames[fi]] # color ) # 动画展⽰ anim = animation.FuncAnimation(fig, animate, frames=len(frames)) plt.show() draw_chart()
pyecharts绘图属性设置方法
pyecharts中,y轴如何显⽰在右侧:
# 这是pyecharts中⼀般的绘图步骤:
from pyecharts.faker import Faker
from pyecharts import options as opts
from pyecharts.charts import Bar
from pyecharts.commons.utils import JsCode
def bar_base() -> Bar:
c = (
Bar()
.add_xaxis(Faker.choose())
.add_yaxis("商家A", Faker.values())
.set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本⽰例",
subtitle="我是副标题"))
)
return c
bar_base().render('C:/jupyter_notebook/venv_env/myhtml/bar.html')
那么,如何设置y轴显⽰在右侧,添加⼀⾏代码:
.set_global_opts(yaxis_opts=opts.AxisOpts(position=‘right’))
# 这是pyecharts中⼀般的绘图步骤: from pyecharts.faker import Faker from pyecharts import options as opts from pyecharts.charts import Bar from pyecharts.commons.utils import JsCode def bar_base() -> Bar: c = ( Bar() .add_xaxis(Faker.choose()) .add_yaxis("商家A", Faker.values()) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-基本⽰例", subtitle="我是副标题")) .set_global_opts(yaxis_opts=opts.AxisOpts(position='right')) ) return c bar_base().render('C:/jupyter_notebook/venv_env/myhtml/bar11.html'
如何锁定这个属性,⾸先应该在set_global_opts函数的参数中找,它⼀共有以下 11个设置参数,它们 位于模块 charts.py:
title_opts: types.Title = opts.TitleOpts(),
legend_opts: types.Legend = opts.LegendOpts(),
tooltip_opts: types.Tooltip = None,
toolbox_opts: types.Toolbox = None,
brush_opts: types.Brush = None,
xaxis_opts: types.Axis = None,
yaxis_opts: types.Axis = None,
visualmap_opts: types.VisualMap = None,
datazoom_opts: types.DataZoom = None,
graphic_opts: types.Graphic = None,
axispointer_opts: types.AxisPointer = None
因为是设置y轴显⽰在右侧,⾃然想到设置参数 yaxis_opts,因为其类型为 types.Axis,所以再进 ⼊ types.py,同时定位到 Axis:
Axis = Union[opts.AxisOpts, dict, None]
Union是pyecharts中可容纳多个类型的并集列表,也就是Axis可能为 opts.AxisOpt, dict, 或 None 三种类型。查看第⼀个 opts.AxisOpt类,它共定义以下 25个参数:
type_: Optional[str] = None,
name: Optional[str] = None,
is_show: bool = True,
is_scale: bool = False,
is_inverse: bool = False,
name_location: str = “end”,
name_gap: Numeric = 15,
name_rotate: Optional[Numeric] = None,
interval: Optional[Numeric] = None,
grid_index: Numeric = 0, position: Optional[str] =
None,
offset: Numeric = 0,
split_number: Numeric = 5,
boundary_gap: Union[str, bool, None] = None,
min_: Union[Numeric, str, None] = None,
max_: Union[Numeric, str, None] = None,
min_interval: Numeric = 0, max_interval: Optional[Numeric]
= None,
axisline_opts: Union[AxisLineOpts, dict, None] = None,
axistick_opts: Union[AxisTickOpts, dict, None] = None,
axislabel_opts: Union[LabelOpts, dict, None] = None,
axispointer_opts: Union[AxisPointerOpts, dict, None] = None,
name_textstyle_opts: Union[TextStyleOpts, dict, None] = None,
splitarea_opts: Union[SplitAreaOpts, dict, None] = None,
splitline_opts: Union[SplitLineOpts, dict] = SplitLineOpts(),
pyecharts绘图属性设置方法(下)
def bar_border_radius(): c = ( Bar(init_opts=opts.InitOpts(animation_opts=opts.AnimationOpts(animation_delay=500, animation_easing="cubicOut"),theme=ThemeType.MACARONS)) .add_xaxis( ["草莓", "芒果", "葡萄", "雪梨", "西⽠", "柠檬", "车厘⼦"]) .add_yaxis("A", Faker.values(),category_gap="50%",markpoint_opts=opts.MarkPointOpts(),is_selected=True) .set_series_opts(itemstyle_opts={ "normal": { "color": JsCode("""new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: 'rgba(0, 244, 255, 1)' }, { offset: 1, color: 'rgba(0, 77, 167, 1)' }], false)"""), "barBorderRadius": [6, 6, 6, 6], "shadowColor": 'rgb(0, 160, 221)', }}, markpoint_opts=opts.MarkPointOpts( data=[ opts.MarkPointItem(type_="max", name="最⼤值"), opts.MarkPointItem(type_="min", name="最⼩值"), ] ),markline_opts=opts.MarkLineOpts( data=[ opts.MarkLineItem(type_="min", name="最⼩值"), opts.MarkLineItem(type_="max", name="最⼤值") ] )) .set_global_opts(title_opts=opts.TitleOpts(title="Bar-参数使⽤例⼦"), toolbox_opts=opts.ToolboxOpts(),yaxis_opts=opts.AxisOpts(position="right",name="Y轴"),datazoom_opts=opts.DataZoomOpts(),) ) return c bar_border_radius().render()
pyecharts原来可以这样快速⼊门(上)
pyecharts官档介绍-五个特性:
1)简洁的 API 设计,使⽤如丝滑般流畅,⽀持链式调⽤;
2)囊括了 30+ 种常见图表,应有尽有;
3)⽀持主流 Notebook 环境,Jupyter Notebook 和 JupyterLab;
4)可轻松集成⾄ Flask,Django 等主流 Web 框架;
5)⾼度灵活的配置项,可轻松搭配出精美的图表
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# render 会⽣成本地 HTML ⽂件,默认会在当前⽬录⽣成 render.html ⽂件
# 也可以传⼊路径参数,如 bar.render("mycharts.html")
bar.render('C:/jupyter_notebook/venv_env/myhtml/bar21.html')
Bar(RectChart)是什么意思:RectChart是Bar的⼦类。
pyecharts原来可以这样快速⼊门(中)
⼀切皆options。pyecharts⽤起来很爽的另⼀个重要原因, 参数配置项 封装的⾮常nice,通过定义⼀些列基础的配置组 件,⽐如 global_options.py模块中定义的配置对象有以下 27个
AngleAxisItem,
AngleAxisOpts,
AnimationOpts,
Axis3DOpts,
AxisLineOpts,
AxisOpts,
AxisPointerOpts,
AxisTickOpts,
BrushOpts, CalendarOpts,
DataZoomOpts,
Grid3DOpts, GridOpts,
InitOpts, LegendOpts,
ParallelAxisOpts,
ParallelOpts,
PolarOpts,
RadarIndicatorItem,
RadiusAxisItem,
RadiusAxisOpts,
SingleAxisOpts,
TitleOpts,
ToolBoxFeatureOpts,
ToolboxOpts, TooltipOpts,
VisualMapOpts,
pyecharts原来可以这样快速⼊门(下)
第二个例子
了解上⾯的配置对象后,再看官档给出的第⼆个例⼦,与第⼀个例⼦相⽐,增加了⼀⾏代码: set_global_opts函数。
from pyecharts.charts import Bar
from pyecharts import options as opts
# V1 版本开始⽀持链式调⽤
# 你所看到的格式其实是 `black` 格式化以后的效果
# 可以执⾏ `pip install black` 下载使⽤
bar = (
Bar()
.add_xaxis(["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
.set_global_opts(title_opts=opts.TitleOpts(title="主标题", subtitle="副标题"))
bar.render()
set_global_opts函数在pyecharts中被⾼频使⽤,它定义在底层基础模块 Chart.py中,它是前⾯说 到的 RectChart的⼦类, Bar类的孙⼦类。浏览下函数的参数:
def set_global_opts(
self,
title_opts: types.Title = opts.TitleOpts(),
legend_opts: types.Legend = opts.LegendOpts(),
tooltip_opts: types.Tooltip = None,
toolbox_opts: types.Toolbox = None,
brush_opts: types.Brush = None,
xaxis_opts: types.Axis = None,
yaxis_opts: types.Axis = None,
visualmap_opts: types.VisualMap = None,
datazoom_opts: types.DataZoom = None,
graphic_opts: types.Graphic = None,
axispointer_opts: types.AxisPointer = None,
)
以第⼆个参数 title_opts为例,说明 pyecharts中参数赋值的风格。 ⾸先, title_opts是 默认参数 ,默认值为 opts.TitleOpts(),这个对象在上⼀节中,我们提到过, 是 global_options.py模块中定义的 27个配置对象种的⼀个。 其次,pyecharts中为了增强代码可读性,参数的类型都显⽰的给出。此处它的类型为: types.Title. 这是什么类型?它的类型不是 TitleOpts吗?不急,看看Title这个类型的定义:
Title = Union[opts.TitleOpts, dict]
原来 Title可能是 opts.TitleOpts, 也可能是python原⽣的 dict. 通过 Union实现的就是这种 类型效 果 。所以这就解释了官档中为什么说也可以使⽤字典配置参数的问题,如下官档:
# 或者直接使⽤字典参数
# .set_global_opts(title_opts={"text": "主标题", "subtext": "副标题"})
)
最后,真正的关于图表的标题相关的属性都被封装到TitleOpts类中,⽐如 title, subtitle属性,查 看源码,TitleOpts对象还有更多属性:
class TitleOpts(BasicOpts): def __init__( self, title: Optional[str] = None, title_link: Optional[str] = None, title_target: Optional[str] = None, subtitle: Optional[str] = None, subtitle_link: Optional[str] = None, subtitle_target: Optional[str] = None, pos_left: Optional[str] = None, pos_right: Optional[str] = None, pos_top: Optional[str] = None, pos_bottom: Optional[str] = None, padding: Union[Sequence, Numeric] = 5, item_gap: Numeric = 10, title_textstyle_opts: Union[TextStyleOpts, dict, None] = None, subtitle_textstyle_opts: Union[TextStyleOpts, dict, None] = None, )
OK. 到此跟随⼊门的官方文档,结合两个例⼦实现的背后源码,探讨了:
1)与包结构组织相关的 init.py;
2)类的继承关系:Bar->RectChart->Chart;
3)链式调⽤;
4)重要的参数配置包 options,以TitleOpts类为例, set_global_opts将它装载到Bar类中实现属性⾃定义。
1分钟学会画 pairplot 图
seaborn 绘图库,基于 matplotlib 开发,提供更⾼层绘图接⼜。 学习使⽤ seaborn 绘制 pairplot 图 pairplot 图能直观的反映出两两特征间的关系,帮助我们对数据集建⽴初步印象,更好的完成分类和 聚类任务。 使⽤ skearn 导⼊经典的 Iris 数据集,共有 150 条记录,4 个特征,target 有三种不同值。 使⽤ seaborn 绘制 sepal_length, petal_length 两个特征间的关系矩阵: ```python from sklearn.datasets import load_iris import matplotlib.pyplot as plt import seaborn as sns from sklearn import tree import pandas as pd iris = load_iris() df=pd.DataFrame(iris.data, columns=iris.feature_names) sns.set(style="ticks") df02 = df.iloc[:,:] # 选择⼀对特征 print(df02) sns.pairplot(df02) plt.show() ``` 设置颜⾊多显: ```python import matplotlib.pylab as plt import seaborn as sns df = sns.load_dataset('iris') my_dpi=96 plt.figure(figsize=(480/my_dpi, 480/my_dpi), dpi=my_dpi) sns.pairplot(df, kind="scatter", hue="species", markers=["o", "s", "D"], palette="Set2") plt.show() ``` 绘制所有特征散点矩阵: ```python import matplotlib.pylab as plt import seaborn as sns df = sns.load_dataset('iris') my_dpi=96 plt.figure(figsize=(480/my_dpi, 480/my_dpi), dpi=my_dpi) sns.pairplot(df, kind="scatter", hue="species", plot_kws=dict(s=80, edgecolor="white", linewidth=2.5)) plt.show() ```
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。