基于线的热图或二维线直方图

2024-03-06

我有一个合成数据集,其中包含 1000 个不同阶的噪声多边形和 sin/cos 曲线,我可以使用 python seaborn 将其绘制为线条。

由于我有很多重叠的线,我想绘制某种线图的热图或直方图。 我尝试过迭代列并聚合计数以使用 seaborn 的热图,但是对于很多行,这需要相当长的时间。

产生我想要的结果的下一个最好的东西是六边形图(带有seaborn jointgraph)。

但这是运行时间和粒度之间的折衷(所示图表的网格大小为 750)。我找不到任何其他图表类型来解决我的问题。但我也不知道它到底应该叫什么。

我也尝试过将线条 alpha 设置为 0.2。这会产生与我想要的类似的图表。但它不太精确(如果超过 5 条线在同一点重叠,我的透明度就已经为零)。此外,它还缺少热图的典型颜色。

(模拟搜索术语为:热图、二维线直方图、线直方图、密度图...)

有谁知道绘制此图的软件包更高效、更高质量或者知道如何使用流行的 python 绘图仪(即 matplotlib 系列:matplotlib、seaborn、bokeh)来完成此操作。不过我对任何包裹都很好。


我花了一段时间,但我终于使用解决了这个问题数据着色器 http://datashader.org/。如果使用笔记本,这些图可以嵌入到交互式中Bokeh http://bokeh.pydata.org/情节,看起来真的很不错。

无论如何,这里是静态图像的代码,以防其他人需要类似的东西:

# coding: utf-8
import time

import numpy as np
from numpy.polynomial import polynomial
import pandas as pd

import matplotlib.pyplot as plt
import datashader as ds
import datashader.transfer_functions as tf


plt.style.use("seaborn-whitegrid")

def create_data():
    # ...

# Each column is one data sample
df = create_data()

# Following will append a nan-row and reshape the dataframe into two columns, with each sample stacked on top of each other
#   THIS IS CRUCIAL TO OPTIMIZE SPEED: https://github.com/bokeh/datashader/issues/286

# Append row with nan-values
df = df.append(pd.DataFrame([np.array([np.nan] * len(df.columns))], columns=df.columns, index=[np.nan]))

# Reshape
x, y = df.shape
arr = df.as_matrix().reshape((x * y, 1), order='F')
df_reshaped = pd.DataFrame(arr, columns=list('y'), index=np.tile(df.index.values, y))
df_reshaped = df_reshaped.reset_index()
df_reshaped.columns.values[0] = 'x'

# Plotting parameters
x_range = (min(df.index.values), max(df.index.values))
y_range = (df.min().min(), df.max().max())
w = 1000
h = 750
dpi = 150
cvs = ds.Canvas(x_range=x_range, y_range=y_range, plot_height=h, plot_width=w)

# Aggregate data
t0 = time.time()
aggs = cvs.line(df_reshaped, 'x', 'y', ds.count())
print("Time to aggregate line data: {}".format(time.time()-t0))

# One colored plot
t1 = time.time()
stacked_img = tf.Image(tf.shade(aggs, cmap=["darkblue", "darkblue"]))
print("Time to create stacked image: {}".format(time.time() - t1))

# Save
f0 = plt.figure(figsize=(w / dpi, h / dpi), dpi=dpi)
ax0 = f0.add_subplot(111)
ax0.imshow(stacked_img.to_pil())
ax0.grid(False)
f0.savefig("stacked.png", bbox_inches="tight", dpi=dpi)

# Heat map - This uses a equalized histogram (built-in default), there are other options, though.
t2 = time.time()
heatmap_img = tf.Image(tf.shade(aggs, cmap=plt.cm.Spectral_r))
print("Time to create stacked image: {}".format(time.time() - t2))

# Save
f1 = plt.figure(figsize=(w / dpi, h / dpi), dpi=dpi)
ax1 = f1.add_subplot(111)
ax1.imshow(heatmap_img.to_pil())
ax1.grid(False)
f1.savefig("heatmap.png", bbox_inches="tight", dpi=dpi)

运行时间如下(以秒为单位):

Time to aggregate line data: 0.7710442543029785
Time to create stacked image: 0.06000351905822754
Time to create stacked image: 0.05600309371948242

The resulting plots: Stacked lines

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

基于线的热图或二维线直方图 的相关文章

随机推荐

  • 如何在混合 MVC 和 Web 表单上路由网页

    我创建了一个混合 MVC 和 Web 窗体的网站 使用后来的 Visual Studio 2013 工具非常容易完成 一切正常 我可以正确导航到 MVC 和 Web 表单页面 然而 我想做的是将所有 Web 表单页面放入特定的子目录中 然后
  • Mysql 选择多边形包含点的位置始终为 false

    我尝试过各种函数 如 MBRWithin MBRContains Intersects Contains 所有这些函数都可以在此处的大量帖子中找到 但还没有成功 这是简化的查询 SELECT FROM users WHERE Interse
  • Android NDK 调试:armeabi-v7a 不工作

    日食 Cygwin NDK 8c 构建共享库 切换到armeabi v7a 后我无法再启动gdbserver 我在网上搜索了几个小时 但找不到专门处理 armeabi v7a 调试问题的主题 由于使用依赖于它的第三方库 我没有选择切换到ar
  • 如何在Python中的无向图中高效计算三合会普查

    我正在计算triad census如下我的undirected network import networkx as nx G nx Graph G add edges from A B A C D B E C E F B H B G B
  • Facebook 访问令牌 [Javascript SDK]

    我正在为我的网站编写 Facebook 登录 我正在使用 Javascript Sdk 但我不明白一件事 function fbLogin FB login function response if response authRespons
  • VSTS 警告:确保测试发现者和执行者已注册,并且平台和框架版本设置合适,然后重试

    尝试在 VSTS CD 任务下执行集成测试时出现以下错误Visual Studio Test D a r1 a SiteSearchFramework e2e XXX SiteSearch EndToEnd Integration Test
  • 片段中的上下文操作模式 - 如果不聚焦则关闭?

    我在嵌套片段中实现了上下文操作模式栏 该片段是视图分页器的一部分 视图分页器也是片段和导航抽屉的一部分 我的问题 如果片段不再集中 我想关闭上下文操作模式栏 因此 如果我滑动视图寻呼机 操作模式栏应该关闭 但如果我使用onPause 嵌套片
  • 如何从仅返回 1 或 0 条记录的 Diesel 查询中获取 Option 而不是 Option>?

    我正在查询名为的表中的现有记录messages 然后 该查询用作 查找或创建 函数的一部分 fn find msg by uuid lt a gt conn PgConnection msg uuid Uuid gt Option
  • 错误:执行 gem 时... (OpenSSL::X509::StoreError)

    我尝试以管理员身份将串行端口安装到 Windows 7 中 但是 我面临以下错误 C Sites gt gem install serialport ERROR While executing gem OpenSSL X509 StoreE
  • 使用 Bootstrap 进行表单验证 (jQuery)

    有人可以帮我解决这个代码吗 我正在对表单使用 bootstrap 并尝试使用 jQuery 验证它 不幸的是 表单验证并没有告诉我我做错了什么 我从那里得到了脚本http jqueryvalidation org documentation
  • 补丁文件和 diff 文件之间的区别

    有人可以向我解释一下 a 和 a 之间的区别吗 diff文件和 patch file 重要的是文件的内容 而不是扩展名 这两个扩展都意味着某种 diff 实用程序 diff git diff git format patch svn dif
  • 使用 jQuery 获取另一个文件列表中的下一个 href?

    我搜索了又搜索 似乎我被这个问题困住了 不知何故 我认为这不会太难 而且可能不适合任何对 jQuery 有更多了解的人 我有一个 html 文件 我们称之为 originalfile html 其中有几个列表 如下所示 div ul li
  • 什么是“无为”卷积核

    如果我尝试在频率空间中执行卷积核 什么是 不执行任何操作 的内核 换句话说 如果我在应用内核并在频率空间中对其进行归一化后查看图像 我只想查看原始傅里叶变换 是单位矩阵吗 我的内核是 3x3 Thanks 一个什么都不做的 3x3 内核将是
  • 将字典转换为namedtuple或其他类似可散列字典的Pythonic方法?

    我有一本字典 比如 d a 1 b 2 c 3 d 4 我想将其转换为命名元组 我当前的方法是使用以下代码 namedTupleConstructor namedtuple myNamedTuple join sorted d keys n
  • UserManager.Update(user) 方法不是线程安全的

    我正在尝试使用控制器中的 UserManager 更新用户 就在我更新用户之前 对外部服务的调用会触发一个 Webhook 该 Webhook 也会使用 UserManager 尝试更新同一用户 但这是一个不同的请求和应用程序的不同部分 w
  • 基础上的全高柱

    我正在使用 Foundation 5 Framework 需要创建 3 个相同高度的列 第二列包括 2 个面板 我需要将所有列拉伸到全高 在第二列中只有第二个面板拉伸到全高 任何想法 我不想为此使用块网格 My code div class
  • 准备好的陈述如何运作?

    我正在编写一些数据库例程 并且正在使用准备好的语句 我的环境是带有 PHP5 的 PDO 据我所知 准备好的语句主要提供性能优势 以及一些辅助优势 例如不必手动 SQL 转义输入数据 我的问题是关于性能部分 下面有两个 getPrice 函
  • 使用 PHP 进行 oAuth(适用于 google api)

    如何在 PHP 中使用 oAuth 我无法使用 pecl 安装 oauth 类 因为我使用的是共享托管 I found http code google com p oauth php http code google com p oaut
  • 带有 istream& 参数的函数 C++

    我希望我的程序使用下面的 readFile 函数读取文件 我试图找出如何使用 istream 参数调用函数 该函数的目标是通过接收文件名作为参数来读取文件 include
  • 基于线的热图或二维线直方图

    我有一个合成数据集 其中包含 1000 个不同阶的噪声多边形和 sin cos 曲线 我可以使用 python seaborn 将其绘制为线条 由于我有很多重叠的线 我想绘制某种线图的热图或直方图 我尝试过迭代列并聚合计数以使用 seabo