pyecharts--实践心得

1.散点图

1.1 X和Yz轴的数据类型

除了x轴数据必须是str类型之外,y轴的数据也要是可迭代对象,不能简单的将读取的series进行绘制否则一定报错:

正确做法:

data1 = [str(i) for i in data1]
data2 = [float(i) for i in data2]

1.2 XY轴设置最大值和最小值

散点图绘制时,需要设置横纵坐标的最大值,最小值,否则生成的散点图片可能达不到预期目标,通过opts.AxisOpts的max_,min_进行设置:

min_1, max_1 = min(data1) - 2, max(data2) + 2
min_2, max_2 = min(data2), max(data2)

1.3 设置XY轴标签

对于横纵坐标标签设置官网上面都有介绍:

yaxis_opts=opts.AxisOpts( type_="value", name="我是纵坐标标签", name_location="middle", name_gap=50, name_rotate=90,)

1.4 设置主副标题都居中显示

#通过pos_left让主副标题在页面居中显示,使用text_align="center“,让副标题可以相对于主标题进行居中显示。

title_opts=opts.TitleOpts(title=f"{self.sheet_name1} | {self.sheet_name2} {title_name}",pos_left="center",subtitle=f"{self.var1}-{self.var2}", text_align="center")

1.5 设置标签名旋转

当x轴的标签很长很长,即使设置了旋转角度之后还是会让x轴数据显示不全,此时可以使用grid,让整体页面进行向上浮动,就可以将x轴全部显示出来

全局设置里面:

# 设置横坐标标签旋转45度

xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=45)),

# 实现界面上浮20%

grid = ( Grid(init_opts=opts.InitOpts(width="1800px", theme="white")) .add(line, grid_opts=opts.GridOpts(pos_bottom="20%")) )

1.6 修改工具栏下载图片背景色

默认工具栏下载出来的图片是暗色系的

# 添加工具栏,将下载图片的背景改为白色

 toolbox_opts=opts.ToolboxOpts(is_show=True, feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(background_color="white")))

1.7 问:如何实现mini.js嵌入网页内?

求教大佬们,使用pyechart生成的html,默认使用的是

<script type="text/javascript" src="https://assets.pyecharts.org/assets/v5/echarts.min.js"></script>

这个是必须在联网条件下面才能看到网页的加载效果,看了很多的解决办法都是下载echarts.mini.js,不管是添加服务器还是修改加载路径,前提条件都是有这个mini.js,有没有方法可以让echarts.mini.js的内容嵌入到我写的html网页里面,即使没有安装环境的人,断网条件下,有个浏览器就可以打开我写的网页。

1.8 问:如何让一个点对应一个图例

还有一个问题,散点图绘制的API都是两组数据,(x,y)确定一个散点图的一个点,有没有办法让每个点都存在自己对应的图例,而不是像现在这样只是一个图例“散点图”

.add_xaxis(xaxis_data=data1)

.add_yaxis(series_name="散点图", y_axis=data2, symbol_size=8,label_opts=opts.LabelOpts(is_show=False))

附代码:

from pyecharts.charts import Scatter, Line
from pyecharts import options as opts
import pandas as pd
from scipy import stats
from pathlib import Path

path = Path.home() / "Desktop" / "combine.xlsx"
df1 = pd.read_excel(path, sheet_name="Sheet1")
df2 = pd.read_excel(path, sheet_name="Sheet2")

# 处理数据
data1 = df1[df1.columns[1]][4:]
data2 = df2[df2.columns[1]][4:]
unit_count = len(data1)
slope, intercept, r, p, std_err = stats.linregress(data1, data2)
mymodel = [i for i in list(map(lambda x: slope * x + intercept, data1))]
# 回归线
regression_line = f"y = {format(slope, '.4f')}* x + {format(intercept, '.4f')}"
min_1, max_1 = min(data1) - 2, max(data2) + 2
data1 = [str(i) for i in data1]
data2 = [float(i) for i in data2]
min_2, max_2 = min(data2), max(data2)

# 绘图
line = (
    Line(init_opts=opts.InitOpts(width="1800px", theme="white"), )
        .add_xaxis(data1)
        .add_yaxis(regression_line, mymodel)
        .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
        legend_opts=opts.LegendOpts(is_show=False),
    )
)
scatter = (
    Scatter()
        .add_xaxis(xaxis_data=data1)
        .add_yaxis(series_name="", y_axis=data2, symbol_size=8, label_opts=opts.LabelOpts(is_show=False))
        .set_global_opts(
        xaxis_opts=opts.AxisOpts(
            name="横坐标 [X]",
            name_location="middle",
            name_gap=30,
            type_="value", splitline_opts=opts.SplitLineOpts(is_show=True), min_=format(min_1, ".1f"),
            max_=format(max_1, ".1f")
        ),
        yaxis_opts=opts.AxisOpts(
            type_="value",
            name="纵坐标 [Y]",
            name_location="middle",
            name_gap=50,
            name_rotate=90,
            axistick_opts=opts.AxisTickOpts(is_show=True),
            splitline_opts=opts.SplitLineOpts(is_show=True),
            min_=format(min_2, ".1f"), max_=format(max_2, ".1f")
        ),
        # 图例设置
        legend_opts=opts.LegendOpts(orient="vertical", pos_right=1, type_="scroll",
                                    pos_bottom="50%", ),
        # 添加标题
        title_opts=opts.TitleOpts(title=f"Scatter CORR ({format(r, '.3f')}) ({unit_count}x)", pos_left="center", ),
        # 视觉映射
        visualmap_opts=opts.VisualMapOpts(type_="color", min_=min_1 + 2, max_=max_1 - 2, is_show=False, dimension=1)
    )
)

scatter.overlap(line).render("拟合.html")

2.折线图

2.1 横坐标为string类型

折线图的横坐标必须是string类型,如果是普通的int或是float类型都会导致绘制的图片都是只显示一部分

3.回归线图 

3.1 一元回归线方程

#斜率,截距,用于计算回归线方程;

#皮尔逊参数,可以用于评价两组数据的相关性,如果相关系数接近于1,则表示两组数据之间存在强相关性;如果相关系数接近于0,则表示两组数据之间存在较弱或者没有相关性;

#假设检验的p值,可以用于判断回归是否具有统计学意义,如果p值小于0.05,则表示回归对数据的解释是高度显著的;如果p值大于0.05,则表示回归对数据的解释并不显著,需要重新评估模型;

#残差标准差的估计值,可以用于评估回归方程的拟合优度,残差标准差越小,则表示回归方程对数据拟合得越好.

​​​​​​​from scipy import stats
slope, intercept, r, p, std_err = stats.linregress(data1, data2)
mymodel = [float(i) for i in list(map(lambda x: slope * x + intercept, data1))]
line = (
    Line()
    .add_xaxis(data1)
    .add_yaxis("回归线",mymodel)
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)

3.2 同时显示散点图和回归线方程

scatter.overlap(line).render("拟合.html")

3.3 问: 如何设置不同散点不同色 

绘制散点图时,所有的点都是同一色,使用视觉映射来调节,有点不太合理,如何设置不同散点不同色呢? 

visualmap_opts=opts.VisualMapOpts(type_="color",max_=30,min_=10,dimension=1,is_show=False)
  • 20
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值