You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyVista绘制股票蜡烛图时自定义柱体任意位置放置的实现问题

PyVista 自定义位置蜡烛图(K线图)实现问题

花了一天时间对照示例文档学习PyVista使用,目前仍处于入门阶段,卡在一个具体功能实现上迟迟无法解决。

选择PyVista的原因是它可以流畅承载大规模数据点的可视化渲染,我需要用它绘制适用于股票等场景的蜡烛图(K线图),目前无法实现上下端点可放置在图表网格任意位置的2D柱体,具体遇到的问题如下:

  • 内置图表功能不支持柱体脱离0基线放置,无法自定义柱体的上下端点位置
  • 尝试通过3D相关接口模拟2D柱体效果时,出现除零错误、柱体表面生成异常随机网格的问题,同时无法为3D场景添加正确的坐标刻度

已尝试的实现方案

目前已经试过三种实现路径,对应代码如下:

方案1:调用2D图表的.bar方法实现

import numpy as np
import pyvista as pv

x = [2]
y = [5]

chart = pv.Chart2D()
chart.bar(x, y)
chart.x_axis.tick_locations = x

chart.grid = False  # Disable the grid lines

chart.show()

方案2:使用StructuredGrid(结构化网格)方法实现

import pyvista
import vtk
import numpy as np
from numpy import mgrid
import matplotlib.pyplot as plt


vtkgrid = vtk.vtkStructuredGrid()
grid = pyvista.StructuredGrid(vtkgrid)

xrng = np.arange(-10, 10, 1, dtype=np.float32)
yrng = np.arange(-10, 10, 1, dtype=np.float32)
zrng = np.arange(-1, 0, 1, dtype=np.float32)
x, y, z = np.meshgrid(xrng, yrng, zrng)
grid = pyvista.StructuredGrid(x, y, z)

p = pyvista.Plotter(notebook=0, shape=(1,1))
cmap = plt.cm.get_cmap("viridis", 4)
p.background_color='white'

p.add_mesh(grid, cmap=cmap)

print(xrng)

# grid = pv.StructuredGrid(x, y, z)
p.show_grid()
# grid.plot()
p.show()

方案3:修改hexahedron(六面体)官方示例脚本

该方案可以生成平面方块,但无法为方块添加匹配的坐标网格尺度来绑定坐标点,无法实现精准坐标定位。

import numpy as np
import pyvista as pv
import numpy as np
import vtk
import pyvista as pv


offset = np.array([0, 9])
cells = np.array([8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11, 12, 13, 14, 15])
cell_type = np.array([vtk.VTK_HEXAHEDRON, vtk.VTK_HEXAHEDRON])
cell1 = np.array(
    [
        [0, 0, 0],
        [0, 0, 0],
        [0, 1, 0],
        [0, 1, 0],
        [0, 0, 1],
        [0, 0, 1],
        [0, 1, 1],
        [0, 1, 1],
    ]
)

cell2 = np.array(
    [
        [0, 2, 3],
        [0, 2, 3],
        [0, 1, 3],
        [0, 1, 3],
        [0, 2, 4],
        [0, 2, 4],
        [0, 1, 4],
        [0, 1, 4],
    ]
)

points = np.vstack((cell1, cell2))
grid = pv.UnstructuredGrid(offset, cells, cell_type, points)
cells_hex = np.arange(16).reshape([2, 8])
grid = pv.UnstructuredGrid({vtk.VTK_HEXAHEDRON: cells_hex}, points)

_ = grid.plot(show_edges=True)

核心问题

如何构建可绑定柱体坐标的参考网格,实现柱体在网格上的任意位置放置,求正确的实现方向指引。


内容的提问来源于stack exchange,提问作者thatoneguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:54:23