用plotly从2D直方图填充3D直方图

2023-12-02

我已经做了一个图表,并发布了确切的代码here。这几乎正​​是我想要的,但我希望填充 2D 直方图切片,而不仅仅是一条线。因此,我添加了参数surfaceaxis=0正如我发现的this例子。我得到的图像如下:

enter image description here

我看到代码有点“尝试”做我想做的事,但不完全是。我尝试了其他选项,例如go.Surface or go.Isosurface但没有用。

My code:

# imports
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import plotly.io as pio
from pdb import set_trace

pio.renderers.default = 'browser'

# data
np.random.seed(123)
df = pd.DataFrame(np.random.normal(50, 5, size=(300, 4)), columns=list('ABCD'))

# plotly setup
fig = go.Figure()

# data binning and traces
for i, col in enumerate(df.columns):
    a0 = np.histogram(df[col], bins=10, density=False)[0].tolist()
    a0 = np.repeat(a0, 2).tolist()
    a0.insert(0, 0)
    a0.append(0)
    a1 = np.histogram(df[col], bins=10, density=False)[1].tolist()
    a1 = np.repeat(a1, 2)
    # set_trace()

    fig.add_traces(go.Scatter3d(x=[i] * len(a0), y=a1, z=a0,
                                mode='lines',
                                name=col,
                                surfaceaxis=0
                                )
                   )

    # fig.add_traces(go.Surface(x=[i] * len(a0), y=a1, z=a0))
    # fig.add_traces(go.Isosurface(x=[i] * len(a0), y=a1, z=a0))
fig.show()

So, here,@empet 给了我解决方案。

代码:

import numpy as np
import pandas as pd
import plotly.graph_objects as go

def triangulate_histogtam(x, y, z):
   
    if len(x)  != len(y) != len(z) :
        raise ValueError("The  lists x, y, z, must have the same length")
    n = len(x)
    if n % 2 :
        raise ValueError("The length of lists x, y, z must be an even number") 
    pts3d = np.vstack((x, y, z)).T
    pts3dp = np.array([[x[2*k+1], y[2*k+1], 0] for k in range(1, n//2-1)])
    pts3d = np.vstack((pts3d, pts3dp))
    #triangulate the histogram bars:
    tri = [[0,1,2], [0,2,n]]
    for k, i  in zip(list(range(n, n-3+n//2)), list(range(3, n-4, 2))):
        tri.extend([[k, i, i+1], [k, i+1, k+1]])
    tri.extend([[n-3+n//2, n-3, n-2], [n-3+n//2, n-2, n-1]])      
    return pts3d, np.array(tri)

# data
np.random.seed(123)
df = pd.DataFrame(np.random.normal(50, 5, size=(300, 4)), columns=list('ABCD'))

# plotly setup
fig = go.Figure()

# data binning and traces
bins = 10

bar_color = ['#e763fa', '#ab63fa', '#636efa', '#00cc96']
for m, col in enumerate(df.columns):
    a0=np.histogram(df[col], bins=bins, density=False)[0].tolist()
    a0=np.repeat(a0,2).tolist()
    a0.insert(0,0)
    a0.pop()
    a0[-1]=0
    a1=np.histogram(df[col], bins=bins-1, density=False)[1].tolist()
    a1=np.repeat(a1,2)
   
    verts, tri = triangulate_histogtam([m]*len(a0), a1, a0)
    x, y, z = verts.T
    I, J, K = tri.T
    fig.add_traces(go.Mesh3d(x=x, y=y, z=z, i=I, j=J, k=K, color=bar_color[m], opacity=0.7))
                   
fig.update_layout(width=700, height=700, scene_camera_eye_z=0.8)

Result:

enter image description here

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用plotly从2D直方图填充3D直方图 的相关文章

  • 从绘图 3d 图中抓取相机位置

    我正在绘制 3D 图形并想要调整相机位置 对我来说最好的方法是使用查看器 根据需要缩放和旋转场景 然后以 JSON 形式获取相机位置并将其放入我的脚本中 该脚本生成图片以默认实现相同的位置 根据这条推文 https twitter com
  • Plotly.express choropleth 仅显示一种颜色

    我正在尝试使用创建一个 choroplethplotly express 该图能够加载 但它只显示一种颜色 我可以将鼠标悬停在每个功能上 它会显示相关信息 但不以可变颜色显示 这意味着它正在读取 geojson 但无法正确显示 u geds
  • 情节子图与规格问题,值错误

    我正在尝试使用辅助 y 轴和绘图子图绘制 3 个子图 但无论我如何尝试 仍然会遇到此类错误 值错误 make subplots 的 specs 参数必须是维度为 3 x 1 的字典的 2D 列表 收到类型 的值 secondary y Tr
  • 有什么方法可以绘制印度地图吗?

    我正在尝试使用plotly 绘制印度地图 但无法找到方法来做到这一点 下面是我在美国尝试过的代码 import pandas as pd df sample pd read csv https raw githubusercontent c
  • 如何使用绘图中的范围分隔符?

    我想使用plotly从某些图中的x轴中删除某些间隔 我找到了随附的示例https plotly com python time series https plotly com python time series 但运行它给了我错误 Val
  • R Plotly - 更改悬停信息的字体和不透明度

    我正在尝试更改绘图图中悬停信息框的字体和不透明度 使用 R 我使用了以下代码 但无法弄清楚如何更改悬停框的字体或不透明度 如果这可能的话 plotC lt plot ly tg x FINPERCH y JourneyTime type s
  • 如何制作跨越两列的情节图例

    我正在使用绘图来绘制大量数据的比较 描述每一行的字符串往往会变长 所以我需要将它们设置为多行 然而 在许多情节中 传说可能会消失在屏幕之外 我想将图例分成两列 有没有办法在情节上做到这一点 看着help plotly graph objs
  • 情节性的javascript。 'plotly_click' 上的不是一个函数

    我正在尝试在我的绘图图表上创建一个 onclick 事件 根据文档 我创建了以下图表 var graphDiv document getElementById uniqueId Plotly newPlot uniqueId charDat
  • 当绘制的数据发生更改时,在 R 中更新绘图,无需重新创建小部件

    每次 R 在闪亮 或仅在 R 中创建一个绘图对象时 该小部件都会完全重新创建 对于小数据集 这不是问题 但我正在处理包含数千个散点的绘图 这使得在我的闪亮应用程序中重新创建绘图需要 10 20 秒 我正在寻找一种通过 JavaScript
  • 如何使用plotlyexpress添加置信区间fillcontour?

    我正在使用plotlyexpress 添加趋势线 现在如何像seaborn regplot 中那样绘制置信区间 df px data tips fig px scatter df x total bill y tip trendline o
  • Python ggplot 和 ggplotly

    前 R 用户 我曾经通过 ggplotly 函数广泛组合 ggplot 和plot ly 库来显示数据 刚接触 Python 时 我看到 ggplot 库可用 但找不到与用于图形反应显示的绘图简单组合的任何内容 我想要寻找的是这样的 fro
  • Plotly 中所有地理范围的列表

    我正在尝试使用在地图上绘制数据plotly js 我知道您可以通过以下方式获得一个国家的地图 layout dict title geo dict scope usa 我们有可用范围的列表吗 不同的地区 某个地方 我尝试过谷歌搜索但似乎找不
  • R mapbox / 带有动画和 shapefile 的绘图

    我正在制作一个动画 显示地图上绘制的空间数据 并带有基于日期的动画滑块 除此之外 我想绘制一个随时间变化的形状文件 我的动画在没有 shapefile 的情况下也能正常工作 绘制标记和形状文件不会显示形状文件 似乎是两者之间的某种脱节add
  • 控制绘图中 x 轴上出现哪些刻度线/标签?

    我想控制 X 轴上显示的刻度线 以下代码将刻度线放置在 5 的序列中 位于 5 10 15 30 library plotly df lt data frame x 1 30 y sample 100 300 size 30 replace
  • Python 中的数据可用性图表

    我想知道Python是否有一些东西可以绘制具有多个变量的时间序列的数据可用性 下面显示了一个示例 取自Visavail js 时间数据可用性图表 https github com flrs visavail 1 description 以下
  • 绘图(px)animation_frame错误,日期时间不被接受

    我想通过绘图制作类似于以下示例的动画条形图 https plotly com python animations https plotly com python animations 我有以下代码 fig px bar eu vaccine
  • Jupyter Lab 中未渲染 Plotly Express

    以下代码不会在 Jupyter 实验室中呈现 matplotlib widget import plotly express as px import numpy as np import pandas as pd df pd DataFr
  • 在ggplotly散点图中添加自定义数据标签

    我想显示Species对于每个数据点 当光标位于该点上方而不是 x 和 y 值时 我用iris数据集 另外 我希望能够单击数据点以使标签持久存在 并且当我在图中选择新位置时标签不会消失 如果可能的话 最基本的是标签 持久性问题是一个优点 这
  • 如何制作堆叠条形图并避免在 Plotly 中隐藏误差线

    我正在尝试在两个条形图之间绘制具有对称误差条的堆叠条形图 但是 误差条被 go Bar 的第二个实例隐藏 下面的示例 import plotly graph objects as go x values A B C D E y1 value
  • 如何在时间序列图中添加和定义多条线?

    我正在使用 python 的plotly 库创建一个基于线的时间序列图 我想将其连接到时间序列数据库 但目前我一直在使用 csv 数据进行测试 是否有可能有一个x and y轴 时间与值 并从另一个 csv 列值 主机 加载多行并附加到 x

随机推荐