繁体   English   中英

使用 Matplotlib 中的数字的动态子图

[英]Dynamic subplot using Figures in Matplotlib

提示:本站为国内最大中英文翻译问答网站,提供中英文对照查看,鼠标放在中文字句上可显示英文原文

我想使用 matplotlib 和 pysimplegui 创建一个子图,每次我 select 一些信号复选框(值列表)我应该得到一个对应的 plot 它会根据我的选择动态增加或减小大小所以当我 select 一个复选框相应的 plot 将被绘制并等间距,当我取消选择 plot 时,它应该消失,其他图应该自动占据空间编程语言 - Python3 Matplotlib - 3.6.2

我的要求:

  1. 我的子图 (matplotlib) 中始终最多有 10 行和 1 列
  2. 所以假设我在制作 1 plot 之后调用“plt.show()” 我的结果应该只有一个 plot 那一刻占据了整个数字
  3. 现在我再添加一个 plot,然后调用“plt.show()”,现在它应该有 2 个地块平均占据无花果,这对于 3、4、5...10 个地块来说是一样的,但所有这些地块都应该有一个单个共享轴,以底部为准
  4. 还有一种在任何时间删除 plot 的方法,例如我制作一个 plot 说 axis1 然后我制作一个 plot axis2 现在我想要删除 axis1 之后只有我的 axis2 plot 会占据整个数字

下面的代码满足了我的大部分要求,但只是轴不相互共享,而且每个地块的大小也不同

reff1在创建轴后更改 matplotlib 子图大小/位置reff2在 matplotlib 中动态添加/创建子图

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
 
number_of_plots = 2
fig = plt.figure()
 
ax = fig.add_subplot(1, 1, 1)
 
gs = gridspec.GridSpec(number_of_plots + 1, 1)
plot_space = gs[0:number_of_plots].get_position(fig)
print(plot_space,
      [plot_space.x0, plot_space.y0, plot_space.width, plot_space.height])
ax.set_position(plot_space)
ax.set_subplotspec(gs[0:number_of_plots])              # only necessary if using tight_layout()
fig.tight_layout()                # not strictly part of the question
ax = fig.add_subplot(gs[2], sharex=ax)
 
plt.show()

这是交互部分的基础。

我在每次新选择时从图中删除所有轴,并将新选择的轴添加到相关的GridSpec上。

由于@lru_cache ,每次都不会重新绘制静止轴。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
from functools import lru_cache

plt.ion()


def main():

    # Data that will be selected
    datas = {
        "data1": np.random.randn(100),
        "data2": np.random.randn(100),
        "data3": np.random.randn(100),
        "data4": np.random.randn(100),
    }

    # Emulate data selection over time
    states = (
        ["data1"],
        ["data1", "data3"],
        ["data2", "data3"],
        ["data1", "data2", "data3"],
        ["data2"],
    )

    fig = plt.figure(figsize=(6, 8))

    # Create a new ax on fig with corresponding data plotted
    @lru_cache
    def get_data_ax(data_id):
        ax = fig.add_subplot()
        ax.plot(datas[data_id])
        ax.set_title(data_id)
        return ax

    # Emulate data selection over time
    for data_state in states:

        # Remove all axes, add relevant ones later
        for ax in fig.axes:
            fig.delaxes(ax)

        # Create a GridSpec for the axes to be plot
        num_plots = len(data_state)
        # but give it at least 2 rows so a single ax will not be stretched
        num_rows = max(2, num_plots)
        gs = GridSpec(num_rows, 1)

        # Get all axes to be plotted
        # (thanks to @lru_cache, axes are computed only once)
        axes = [get_data_ax(data_id) for data_id in data_state]

        # Add each ax one by one
        for ax_idx, ax in enumerate(axes):
            # Choose the right location for the given ax
            ax.set_subplotspec(gs[ax_idx])
            fig.add_subplot(ax)

        plt.pause(2)


if __name__ == "__main__":
    main()
问题未解决?试试本站强大的搜索功能,搜索: 使用 Matplotlib 中的数字的动态子图
如何使用matplotlib调整子图中的数字大小

[英]how to resize figures within a subplot using matplotlib

我试图在子图中调整两个数字的大小。 基本上,我想要一个温度分布为111且压力分布为211的子图。但是,我希望压力值小于温度值。 这有可能没有相当复杂的gridspec lib吗? 我有以下代码: 看看我如何尝试更改每个子图中的figsize。 这是错误的方式吗? 好的,所以 ...

Matplotlib - Subplot中的2个数字 - 1是动画

[英]Matplotlib - 2 Figures in Subplot - 1 is Animation

我想在子图中绘制两个数字: 假设ax1将填充添加点的动画(散点图)。 然后,Ax2将这些点分成网格,并显示密度。 我可以在子图1中显示动画,并在完成时将密度图像添加到subplot2吗? ...

将数据插入到matplotlib子图中

[英]Inserting data in to matplotlib subplot Figures

我有一个CSV数据我正在尝试以这种样式将所有数据绘制在同一行上: 如何将我之前依次绘制的以下数据插入到上面创建的图形中? ...

使用seaborn的Matplotlib中的子图错误

[英]subplot error in Matplotlib using seaborn

我正在使用seaborn绘制热图的子图,并使用以下精简代码。 我得到“AttributeError:'numpy.ndarray'对象没有属性'spines'”如果我使用nrows = 2和ncols = 2,如果nrows或ncols = 1,则该图可以工作。 我该如何解决? ...

Matplotlib 子图使用嵌套 for 循环

[英]Matplotlib subplot using nested for loop

第一次发帖,所以提前为错误道歉。 我正在尝试为嵌套的 for 循环创建 matplotlib 子图。 我的数据是广告数据关键字、点击次数、出价、day_of_week 列我想为每个关键字创建 8 个图,x = 出价,y = 点击。 我希望第一个 plot 对该关键字进行出价和点击,其他 7 个对一周 ...

使用wxPython的可拖动Matplotlib子图

[英]Draggable Matplotlib Subplot using wxPython

我试图通过创建可拖动的子图(matplotlib曲线,而不是整个窗口)来扩展可拖动图教程。 我觉得我已经接近了,但缺少一个关键的细节。 大多数代码只是创建饼图切割器子图,图3是我尝试拖动绘图数据的唯一代码。 任何帮助,将不胜感激! ...

Matplotlib:子图

[英]Matplotlib: subplot

我想使用子图绘制几个时间序列信号(8x8)。 我的数据存储在称为H(x,y,N)的矩阵中,其中N是每个信号中的点数。 我想使用子图显示64个信号。 我得到的是第一行中的8个信号,第二行中的4个信号,然后是2、2、1、1、1、1和1。 ...

matplotlib:结合不同的数字并将它们放在一个共同的图例中

[英]matplotlib: combine different figures and put them in a single subplot sharing a common legend

我们有一个代码,用于从input.txt文件创建数字 。 我们需要在一个子图中组合其中两个图。 图1中的数据将绘制在左侧子图中,右侧子图中的图2将绘制,共享相同的图例,并且在轴x和y中具有相同的比例: 这里有一些示例数据: 编辑:@nordev建议的方法有效。 现在将ax ...

使用matplotlib仅显示一个子图的图例

[英]Showing legend for only one subplot using matplotlib

我在使用matplotlib以正确格式显示图例时遇到问题。 编辑:我在2 x 2格式的图形中有4个子图,我只想在第一个子图上绘制图例,第一个子图上画了两行。 我使用下面随附的代码获得的图例包含无尽的条目,并在整个图中垂直延伸。 当我使用相同的代码通过linspace生成伪造数据时,图例 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2023 STACKOOM.COM