使用PyEcharts绘出颜色渐变的折线图

本文介绍了如何使用Python的Pyecharts库,通过CSV数据生成3D折线图,以数据值大小为颜色变化依据,展示了如何设置轴标签、视觉映射和工具箱功能。
摘要由CSDN通过智能技术生成

目的:

以csv表格中的数据为z轴,对应格子的行数为x,列数为y,绘出颜色根据数据值大小而改变的折线图。

import pandas as pd
from pyecharts.charts import Line3D
from pyecharts.charts import Bar3D
from pyecharts import options as opts
from pyecharts.faker import Faker
from pyecharts.options import AxisOpts, ToolBoxFeatureOpts

# 读取csv数据
df = pd.read_csv('文件.csv')

# 获取x、y坐标
x_data = list(range(len(df.index)))
y_data = list(range(len(df.columns)))
print("x_data长度:", len(x_data))
print("y_data长度:", len(y_data))


# 构造三维数据
data = []
for i in range(len(df.index)):
    for j in range(len(df.columns)):
        data.append([i, j, df.iloc[i, j]*1000000-333333]) #填充数值,去掉重复位置的数值,使得数据更具有变化


# 绘制3d折线图
print("data的类型",type(data))
#根据列分组,便于绘图
data0 = [row for row in data if row[1] == 0]
data1 = [row for row in data if row[1] == 1]
data2 = [row for row in data if row[1] == 2]
total_third_column = [row[2] for row in data]

opts.MarkLineOpts(precision=10)
def find_min_max(data):
    print("data的类型", type(data))
    # 获取第三列的值
    third_column = [row[2] for row in data]

    # 查找第三列的最大值和最小值
    max_value = max(third_column)
    min_value = min(third_column)

    # 打印最大最小值
    print("data最大值:", max_value)
    print("data最小值:", min_value)
    return max_value,min_value
max0,min0 = find_min_max(data0)
max1,min1 = find_min_max(data1)
max2,min2 = find_min_max(data2)


# 预设全局变量
ztype = "value"
xname = "Iteration Step"
yname = "Hidden Units"
totalFont = 'Time New Roman'
#开始绘图
c = (
    # 全局配置的初始化设置应在声明折线时设置,否则会出现默认配置
    # 官网手册中给出的是调用options.InitOpts(), 但实际上应该是在Line3D()中设置,不知道为什么
    # 附官网链接:https://pyecharts.org/#/zh-cn/global_options
    Line3D(init_opts=opts.InitOpts(width="100%", height="800px"))# 设置画图的宽高
    .add(
        "",
        data0,
        xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value",name=xname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value",name=yname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        zaxis3d_opts=opts.Axis3DOpts(data=total_third_column,type_=ztype,min_=0.25000000,max_=0.4000000,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        grid3d_opts=opts.Grid3DOpts(
            width=150, depth=100
        ),
    )
    .add(
        "",
        data1,
        xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value",name=xname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value",name=yname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        zaxis3d_opts=opts.Axis3DOpts(data=total_third_column,type_=ztype,min_=0.25000000,max_=0.4000000,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        grid3d_opts=opts.Grid3DOpts(
            width=150, depth=100
        ),
    )
    .add(
        "",
        data2,
        xaxis3d_opts=opts.Axis3DOpts(data=x_data, type_="value",name=xname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        yaxis3d_opts=opts.Axis3DOpts(data=y_data, type_="value",name=yname,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        zaxis3d_opts=opts.Axis3DOpts(data=total_third_column,type_=ztype,min_=0.25000000,max_=0.4000000,textstyle_opts=opts.LabelOpts(font_family=totalFont)),
        grid3d_opts=opts.Grid3DOpts(
            width=150, depth=100,height=100
        ),
    )
    .set_global_opts(
        visualmap_opts=opts.VisualMapOpts(
            max_=0.38000000,
            min_=0.27000000,
            range_color=Faker.visual_color,
            precision = 10,
        ),
        datazoom_opts=opts.DataZoomOpts(
            is_show=True,
        ),
        title_opts=opts.TitleOpts(title="Line3D"),
        axispointer_opts=opts.Axis3DOpts(
            min_=0.2000000,
            max_=0.4000000
        ),
        toolbox_opts=opts.ToolboxOpts(
            is_show=True,
            orient="vertical",
            pos_left="right",
            pos_top="center",
            feature=ToolBoxFeatureOpts(save_as_image=opts.ToolBoxFeatureSaveAsImageOpts(background_color="#fff",pixel_ratio=1.5)),
        ),
        xaxis_opts=opts.AxisOpts(name_textstyle_opts=opts.TextStyleOpts(font_family=totalFont)),
        yaxis_opts=opts.AxisOpts(name_textstyle_opts=opts.TextStyleOpts(font_family=totalFont))
    )
    .set_series_opts(
        markline_opts=opts.MarkLineOpts(
            precision=10
        ),

    )
    .render("line3d_autorotate.html")
)

效果图

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值