在 matplotlib 中实现水平图

2024-03-07

我正在尝试在 matplotlib 中实现地平线图(请参阅:http://square.github.com/cubism/ http://square.github.com/cubism/)

基本思想是,您以窄长宽比显示时间序列,并且随着值的增加(超出 y 轴限制),它们从底部开始以较暗的颜色返回(想想旧的 Atari 游戏,当您去越过屏幕顶部并在底部弹出)。

我的基本方法是将 y 数据划分为卡盘,并使用以下方法在新轴上绘制每个垂直组ax.twinx()并适当设置限制。

仅对于正面或负面数据,这似乎效果很好。

积极的:

消极的:

但由于某种原因,两件事都搞砸了:

# setup the environment
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi*4, 137)
y = (2*np.random.normal(size=137) + x**2)

# reflect everything around the origin
xx = np.hstack([-1*x[::-1], x])
yy = np.hstack([-1*y[::-1], y])

# function to do the plot
def horizonPlot(ax, x, y, nfolds=3, inverty=False, color='CornflowerBlue'):
    axes = [ax]
    if inverty:
        ylims = np.linspace(y.min(), y.max(), nfolds + 1)[::-1]
    else:
        ylims = np.linspace(y.min(), y.max(), nfolds + 1)

    for n in range(1, nfolds):
        newax = axes[-1].twinx()
        axes.append(newax)

    for n, ax in enumerate(axes):        
        ax.fill_between(x, y, y2=ylims[n], facecolor=color, alpha=1.0/nfolds, zorder=n)
        ax.set_ylim([ylims[n], ylims[n+1]])
        ax.set_yticklabels([])
        ax.set_yticks([])

        if inverty:
            ax.invert_yaxis()

    ax.set_xlim([x.min(), x.max()])
    return fig

fig, baseax = plt.subplots(figsize=(6.5,1.5))
posax = baseax.twinx()
negax = posax.twinx()
fig = horizonPlot(posax, xx, np.ma.masked_less(yy, 0), inverty=False, color='DarkGreen')
fig = horizonPlot(negax, xx, np.ma.masked_greater(yy, 0), inverty=True,   color='CornflowerBlue')
for ax in fig.get_axes():
    ax.set_yticklabels([])

fig.tight_layout()
plt.show()

糟糕的图表(注意正面缺乏多层):

任何想法将不胜感激!


我实际上不知道为什么你的不工作,因为在我的电脑上它工作正常。但由于我对这个绘图真的很感兴趣,所以我尝试自己实现它,而不需要所有这些花哨的东西twinx stuff.

我只是将这些区域绘制在彼此之上,因为这实际上是该图的伟大之处。因此我不需要调整 alpha,它们只是相加。

import numpy as np
from matplotlib.pyplot import *

def layer(y,height):
    neg=0.0;pos=0.0
    if y>0:
        if y-height>=0:
            pos=height
            y-= pos
        else : 
            pos = y
    elif y<0:
        if y+height<=0:
            neg=height
            y += neg
        else : 
            neg = -y
    return pos,neg

def horizonPlot(x,y,height=50.0,colors=['CornflowerBlue','DarkGreen']):
    alpha = .10
    vlayer = np.vectorize(layer)
    while (y != 0).any():
        l = vlayer(y,height)
        y -= l[0];y += l[1]
        fill_between(x,0,l[0],color=colors[0], alpha=alpha)
        fill_between(x,height-l[1],height,color=colors[1], alpha=alpha)

def main():
    x = np.linspace(0, np.pi*4, 137)
    y = (2*np.random.normal(size=137) + x**2)
    xx = np.hstack([-1*x[::-1], x])
    yy = np.hstack([-1*y[::-1], y])
    horizonPlot(xx,yy)
    show()

在我的机器上看起来如下所示。希望它对你有用,但我只使用基本的绘图方法。

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

在 matplotlib 中实现水平图 的相关文章

  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • Python(Selenium):如何通过登录重定向/组织登录登录网站

    我不是专业程序员 所以请原谅任何愚蠢的错误 我正在做一些研究 我正在尝试使用 Selenium 登录数据库来搜索大约 1000 个术语 我有两个问题 1 重定向到组织登录页面后如何使用 Selenium 登录 2 如何检索数据库 在我解决
  • 使用带有关键字参数的 map() 函数

    这是我尝试使用的循环map功能于 volume ids 1 2 3 4 5 ip 172 12 13 122 for volume id in volume ids my function volume id ip ip 我有办法做到这一点
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 使用 Tkinter 显示 numpy 数组中的图像

    我对 Python 缺乏经验 第一次使用 Tkinter 制作一个 UI 显示我的数字分类程序与 mnist 数据集的结果 当图像来自 numpy 数组而不是我的 PC 上的文件路径时 我有一个关于在 Tkinter 中显示图像的问题 我为
  • 如何加速Python中的N维区间树?

    考虑以下问题 给定一组n间隔和一组m浮点数 对于每个浮点数 确定包含该浮点数的区间子集 这个问题已经通过构建一个解决区间树 https en wikipedia org wiki Interval tree 或称为范围树或线段树 已经针对一
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • BeautifulSoup 中的嵌套标签 - Python

    我在网站和 stackoverflow 上查看了许多示例 但找不到解决我的问题的通用解决方案 我正在处理一个非常混乱的网站 我想抓取一些数据 标记看起来像这样 table tbody tr tr tr td td td table tr t
  • Flask如何获取请求的HTTP_ORIGIN

    我想用我自己设置的 Access Control Allow Origin 标头做出响应 而弄清楚请求中的 HTTP ORIGIN 参数在哪里似乎很混乱 我在用着烧瓶 0 10 1 以及HTTP ORIGIN似乎是这个的特点之一object
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 基于两列对多维数组中的数据进行分组

    我有一个关联数组的索引数组 如下所示 brand gt ABC model gt xyz size gt 13 brand gt QWE model gt poi size gt 23 brand gt ABC model gt xyz s
  • 向 JFrame 添加新的 WindowListener

    mainFrame addWindowListener new WindowListener Override public void windowClosing WindowEvent e if JOptionPane showConfi
  • 在 aspx 文件中使用内联代码设置文字文本

    在 ASP NET 项目中 我有一个文字 为了设置文本属性 我使用了以下代码
  • 在现实生活中的示例中,何时使用后减/增量与前减/增量? [复制]

    这个问题在这里已经有答案了 可能的重复 如果该值未在语句中的其他任何地方使用 为什么要使用 i 而不是 i https stackoverflow com questions 1392820 why use i instead of i i
  • Linux 内核:获取符号链接背后的真实路径

    我正在研究一些 Linux 内核的东西 我有一个名为 dev blah whatever 的假路径 它指向 dev block real device 问题是lookup bdev将无法遵循符号链接 因此我想通过获取真实路径 dev blo
  • Python CSV 没有属性“Writer”

    有一些代码给我带来了麻烦 它在我的另一个脚本中运行得很好 但我一定把它搞砸了 The if csv 主要是因为我依赖于 argparser 中的 csv 选项 但即使我要在外面运行这个适当的缩进if statement 它仍然返回相同的错误
  • 我可以强制刷新 Facebook 对象的图像 URL 吗?

    我有几个由 Facebook 托管的对象 这些对象已发布到用户的活动日志中 图像的 URL 指向我们的内容交付解决方案 该解决方案重定向到版本化图像 这意味着 URL 可以保持不变 但图像可能会发生变化 正如你在这张图片中看到的 当图像更改
  • CSS 属性开头的 *+ 是什么意思? [复制]

    这个问题在这里已经有答案了 我在 CSS 声明代码中发现了这一点 我现在部分负责 margin 0 0 0 10px margin 4px 0 0 10px margin 3px 0 0 10px 0 the and 0 是我特别关注的 这
  • 为什么 FoldBack 的签名与 F# 中的 Fold 有如此大的不同?

    至少有两件事我不明白 从左侧折叠到右侧折叠的重构不仅需要在签名上进行大量更改 而且在每个地方都需要进行大量更改 具体取决于文件夹功能 没有办法在不翻转参数的情况下将其链接到列表 List foldBack T gt State gt Sta
  • C# 使用通配符复制多个文件并保留文件名

    我需要使用不包含完整信息的文本文件从目录复制多个文件 NCR txt Red 目标目录中有 红1 txt红3 txt红44 txt dest 目录需要有 红1 txt红3 txt红44 txt 我的代码 System IO Director
  • 组内的 Nexus REST API 查询工件

    我有一个 Nexus maven 存储库 我想利用 REST API 来查询我的特定组中的工件列表 我偶然发现了这个文档 但它似乎非常简洁 我找不到我需要的东西 https oss sonatype org nexus restlet1x
  • 使用 Keras 创建自定义条件指标

    我正在尝试使用 keras 为我的神经网络创建以下指标 自定义 Keras 指标 https i stack imgur com fSg0o png 其中 d y pred y true y pred 和 y true 都是向量 使用以下代
  • 在 Pipeline sklearn (Python) 中使用多个自定义类

    我尝试为学生做一个关于 Pipeline 的教程 但我阻止了 我不是专家 但我正在努力改进 所以谢谢你的包容 事实上 我尝试在管道中执行几个步骤来为分类器准备数据帧 第 1 步 数据框的描述 第 2 步 填充 NaN 值 第 3 步 将分类
  • 从hosts文件中获取主机名

    我想从我的模板中获取另一台主机 鉴于以下情况hosts file vm vm hostname monitoring monitoring hostname 我怎样才能访问monitoring hostname从模板 I tried mon
  • 如何使用 jpa/hibernate 在 playframework 子模块中保存模型实体

    我在 PLAY FRAMEWORK 中有一个项目 其中包含几个子模块 每个子模块都有这样的文件夹结构 app controllers models views conf submodulename routes build sbt 我想将所
  • FFMpeg 错误 av_interleaved_write_frame():

    这是我的代码 运行php代码后 FFmpeg version 0 5 Copyright c 2000 2009 Fabrice Bellard et al configuration prefix usr libdir usr lib s
  • ASP.NET 的密码强度控制

    我需要 ASP NET 的密码强度控制 我查看了ajax控制工具包中的控制 但它不是完全可配置的 我需要将它静态地放置在布局上 尝试使用谷歌 Google 密码强度 APIhttp www codeproject com KB ajax G
  • MVC3 - 文件下载 - 等待状态指示器

    好的 我已经完成了作业并发现了类似的线程 然而 我还没有找到好的答案 使用 MVC3 C Razor 视图引擎 我的场景非常简单 我有一个带有调用控制器上的操作的链接的视图 该操作返回动态生成的文件 该过程持续 1 到 10 秒 在此期间
  • 使用 linq 查询输出列表/其他数据结构

    有没有办法在通用集合上执行 Console WriteLine 例子 列表 a 有 a Key 0 apple a Value 0 1 a Key 1 bold a Value 2 2 有没有办法使用 LINQ 写出列表内容 键 值 a a
  • 在 matplotlib 中实现水平图

    我正在尝试在 matplotlib 中实现地平线图 请参阅 http square github com cubism http square github com cubism 基本思想是 您以窄长宽比显示时间序列 并且随着值的增加 超出