- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 suplot2grid 绘制 6 个子图,每个子图内部都有 2 个时间序列。每个子图都应在不同的 Y(垂直)轴上显示值。
我当前的输出接近我的目标,但仍然错误,如下所示:
现在我所做的事情如下:
fig2 = plt.figure(figsize=(14,11))
# defining the axes
ax1_a = plt.subplot2grid((12,2),(0,0), rowspan=3, colspan=1) # drift
ax1_b = plt.subplot2grid((12,2),(4,0), rowspan=3, colspan=1, sharex=ax1_a) # zscore drift
ax1_b = ax1_a.twinx()
ax2_a = plt.subplot2grid((12,2),(4,0), rowspan=3, colspan=1, sharex=ax1_a)
ax2_b = plt.subplot2grid((12,2),(8,0), rowspan=3, colspan=1, sharex=ax1_a)
ax2_b = ax2_a.twinx()
ax3_a = plt.subplot2grid((12,2),(8,0), rowspan=3, colspan=1, sharex=ax1_a)
ax3_b = plt.subplot2grid((12,2),(11,0), rowspan=3, colspan=1, sharex=ax1_a)
ax3_b = ax3_a.twinx()
ax4_a = plt.subplot2grid((12,2),(0,1), rowspan=3, colspan=1)
ax4_b = plt.subplot2grid((12,2),(4,1), rowspan=3, colspan=1, sharex=ax4_a)
ax4_b = ax4_a.twinx()
ax5_a = plt.subplot2grid((12,2),(4,1), rowspan=3, colspan=1, sharex=ax4_a)
ax5_b = plt.subplot2grid((12,2),(8,1), rowspan=3, colspan=1, sharex=ax4_a)
ax5_b = ax5_a.twinx()
ax6_a = plt.subplot2grid((12,2),(8,1), rowspan=3, colspan=1, sharex=ax4_a)
ax6_b = plt.subplot2grid((12,2),(11,1), rowspan=3, colspan=1, sharex=ax4_a)
ax6_b = ax6_a.twinx()
# 定义绘图函数
def plot_drift(axx,label):
axx.plot(df.index[-lenght:], df[label][-lenght:], linestyle='-', lw=2,
label=label,color='b',alpha=1.00)
def plot_zscore(axx,label):
axx.plot(df.index[-lenght:], df[label][-lenght:], linestyle='-', lw=2,
label=label,color='g',alpha=1.00)
def vertical_labels_drift(axx):
axx.set_ylabel('Vols')
def vertical_labels_Zscore(axx):
axx.set_ylabel('Zscore')
def stdev(axx):
axx.axhline(2,linewidth=2,color='yellow') # standard deviations
axx.axhline(-2,linewidth=2,color='yellow') # standard deviations
axx.axhline(3,linewidth=2,color='red')
axx.axhline(-3,linewidth=2,color='red')
# plotting the drift
for i,j in zip([ax1_a,ax2_a,ax3_a,ax4_a,ax5_a,ax6_a],cols_drift):
plot_drift(i,j)
vertical_labels_drift(i)
# plotting the zscore
for i,j in zip([ax1_b,ax2_b,ax3_b,ax4_b,ax5_b,ax6_b], cols_drift_Z):
plot_zscore(i,j)
stdev(i)
vertical_labels_Zscore(i)
所以我的问题是,定义新情节进入子情节的正确方法是什么?因为如果您为 ax1_a
和 ax1_b
设置相同的位置,ax1_a
会被 ax1_b
覆盖,并且仅 ax1_b
被绘制出来。换句话说,如果您这样做:
ax1_a = plt.subplot2grid((12,2),(0,0), rowspan=3, colspan=1) # drift
ax1_b = plt.subplot2grid((12,2),(0,0), rowspan=3, colspan=1, sharex=ax1_a) # zscore drift
ax1_b = ax1_a.twinx()
ax1_a
将不会显示。
此外,我不明白为什么即使在显示的第一个代码中输入了错误的位置,我的图表也会显示。看起来即使您在执行 .twinx()
时将不同的位置放置到 ax1_b
、ax2_b
等,它也会将该图表重置为执行 .twinx()
时引用的图表。
最佳答案
我觉得你误解了axes.twinx()的作用,你必须先实例化一个axes,用于第一组曲线(在左侧打勾),然后使用 .twinx()
获得克隆的轴,在其上绘制第二组曲线。
一个更简单的示例,您可以根据自己的问题进行调整
import matplotlib.pyplot as plt
import numpy as np
t = np.linspace(0,1,101)
nr, nc = 3, 2
fig, axes_array = plt.subplots(nrows=nr, ncols=nc)
for row_of_axes in axes_array:
for ax in row_of_axes:
ax.plot(t,np.sin(np.pi*t), color='black')
ax.twinx().plot(t,2*np.sin(np.pi*t)/(1.1-t), color='red')
fig.tight_layout()
<小时/>
附:更接近您的编码风格
...
for r, row_of_axes in enumerate(axes_array):
for c, ax_a in enumerate(row_of_axes):
ax_b = ax_a.twinx()
ax_a.plot(t,np.sin(np.pi*t), color='black', label='a %d %d'%(r,c))
ax_b.plot(t,2*np.sin(np.pi*t)/(1.1-t), color='red', label='b %d %d'%(r,c))
ax_a.legend(loc=1)
ax_b.legend(loc=3)
fig.tight_layout()
<小时/>
处理OP的评论/请求
您可以简单地使用列表列表来代替ndarray
,
nr, nc = 3, 2
axes_array = [[plt.subplot2grid((nr, nc), (r,c)) for c in range(nc)] for r in range(nr)]
请注意,这与我之前的代码不同,因为它没有给您一个图
确定 - 要应用紧凑布局,您可以像这样继续(未经测试,买者自负)
plt.gcf().tight_layout()
关于python - subplot2grid 内有 2 个图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37121007/
我有点不清楚如何subplot作品。具体来说subplot(121)有什么区别和 subplot(1,2,1)在 MATLAB 中?我试图搜索 subplot文档,但我似乎找不到我要找的东西。 最佳答
我是编码方面的新手,因此也是 Python 方面的新手,所以这听起来可能很愚蠢,但是 Python 中 matplotlib 的 .subplot() 和 .subplots() 方法之间的主要区别是
def plot_it(U1, U2, x, i): fig_1, = plt.plot(x, U1) fig_2, = plt.plot(x, U2) i = str(int
有时候想要把几张图放在一起plot,比较好对比,subplot和subplots都可以实现,具体对比可以查看参考博文。这里用matplotlib库的subplot来举个栗子。 数据长什么样 有两
在matplotlib中,用subplots画子图时,有时候需要调整子图间矩,包括子图与边框的间矩,子图间上下间矩,子图间左右间矩,可以使用fig.tight_layout()函数:
如下所示: matplotlib subplots 设置总图的标题 : fig.suptitle(dname,fontsize=16,x=0.53,y=1.05,) 以上这篇matplotli
我不知道如何使用 R 和 Plotly 使表格子图正常工作。 下面演示了我的意思。我有两张图,一张散点图和一张 table 。使用 subplot 函数,表格图的行为不符合预期。 我要么在散点图上失去
我正在尝试绘制一些子图,但似乎无法共享轴。我看过其他代码,他们似乎完全按照我的尝试做,但我的似乎没有做任何事情。 我只是想在左侧的四个子图中共享各自的轴,同时将最右侧的子图分开。 import num
我想在子图的底部添加一个图例(2 x 2): 正如您所看到的,由于我手动调整了第二行中的图表,因此被挤压了一点。 是否有像 sublegend(...) 这样的函数,或者它是否涉及大量编码? 来源 这
在使用 Matplotlib 绘图时,我们大多数情况下,需要将一张画布划分为若干个子区域,之后,我们就可以在这些区域上绘制不用的图形。在本节,我们将学习如何在同一画布上绘制多个子图。 matplotl
matplotlib.pyplot模块提供了一个 subplots() 函数,它的使用方法和 subplot() 函数类似。其不同之处在于,subplots() 既创建了一个包含子图区域的画布,又创建
使用 plotly 的 subplots() 时,如何删除图例中的重复项? 这是我的 MWE: library(plotly) library(ggplot2) library(tidyr) mpg
如何调整某些子图之间的空白?在下面的示例中,假设我想消除第 1 个和第 2 个子图之间以及第 3 个和第 4 个之间的所有空白,并增加第 2 个和第 3 个之间的空间? import matplotl
如果我绘制如下所示的单个图表,其大小将为 (x * y)。 import matplotlib.pyplot as plt plt.plot([1, 2], [1, 2]) 但是,如果我在同一行中绘制
我需要在网格中显示20张图像,我的代码如下 def plot_matric_demo(img, nrows, ncols): fig, ax = plt.subplots(nrows=nrow
这个问题在这里已经有了答案: How to plot in multiple subplots (12 个答案) 关闭去年。 我在一些帮助下构建了一组饼图 Insert image into pie
我正在寻找一种方法来创建一个包含多个子图的绘图 fig, (ax0, ax1) = plt.subplots(nrows=2, sharex=True) 会在 matplotlib 中执行,然后可以通
当我使用 PyPlot 的 figure() 函数创建单个绘图时,我可以使用字符串作为参数来设置出现窗口的名称: import matplotlib.pyplot as plt figure = pl
我想要一个由四个子图组成的图形。其中两个是通常的线图,其中两个是 imshow-images。 我可以将 imshow-images 格式化为正确的绘图本身,因为它们中的每一个都需要自己的颜色条、修改
我在使用 plt.subplots 时尝试更改图形大小时遇到了一些麻烦。使用下面的代码,我只得到标准尺寸的图表,其中包含我所有的子图(大约有 100 个),并且显然只是一个额外的空 figures
我是一名优秀的程序员,十分优秀!