除了x轴数据必须是str类型之外,y轴的数据也要是可迭代对象,不能简单的将读取的series进行绘制否则一定报错:
正确做法:
data1 = [str(i) for i in data1]
data2 = [float(i) for i in data2]
散点图绘制时,需要设置横纵坐标的最大值,最小值,否则生成的散点图片可能达不到预期目标,通过opts.AxisOpts的max_,min_进行设置:
min_1, max_1 = min(data1) - 2, max(data2) + 2
min_2, max_2 = min(data2), max(data2)
对于横纵坐标标签设置官网上面都有介绍:
yaxis_opts=opts.AxisOpts( type_="value", name="我是纵坐标标签", name_location="middle", name_gap=50, name_rotate=90,)
#通过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")
当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%")) )
默认工具栏下载出来的图片是暗色系的
# 添加工具栏,将下载图片的背景改为白色
toolbox_opts=opts.ToolboxOpts(is_show=True, feature=opts.ToolBoxFeatureOpts( save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(background_color="white")))
求教大佬们,使用pyechart生成的html,默认使用的是
这个是必须在联网条件下面才能看到网页的加载效果,看了很多的解决办法都是下载echarts.mini.js,不管是添加服务器还是修改加载路径,前提条件都是有这个mini.js,有没有方法可以让echarts.mini.js的内容嵌入到我写的html网页里面,即使没有安装环境的人,断网条件下,有个浏览器就可以打开我写的网页。
还有一个问题,散点图绘制的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")
折线图的横坐标必须是string类型,如果是普通的int或是float类型都会导致绘制的图片都是只显示一部分
#斜率,截距,用于计算回归线方程;
#皮尔逊参数,可以用于评价两组数据的相关性,如果相关系数接近于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))
)
scatter.overlap(line).render("拟合.html")
绘制散点图时,所有的点都是同一色,使用视觉映射来调节,有点不太合理,如何设置不同散点不同色呢?
visualmap_opts=opts.VisualMapOpts(type_="color",max_=30,min_=10,dimension=1,is_show=False)