- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何为使用 twinx
的图设置纵横比?
下面,我举三个例子:
twinx
来突出显示我是如何设置宽高比的twinx
来说明如何重置先前定义的纵横比twinx
时定义两个 y
轴的纵横比(这不起作用)我正在使用 matplotlib 1.3.0
以下脚本说明了我如何设置简单绘图的纵横比:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1.6,50) + 50.0
fig = plt.figure()
ax = fig.add_subplot(111)
XLIM = [50.0, 51.6]
YLIM = [0.0, 1.1, 0.0, 11.0]
ax.plot(x,np.sin(x-50.0),'b')
ax.set_xlim([XLIM[0], XLIM[1]])
ax.set_ylim([YLIM[0], YLIM[1]])
ax.set_xticks(np.arange(XLIM[0], XLIM[1], 0.2))
ax.set_yticks(np.arange(YLIM[0], YLIM[1]+0.1, 0.1)[:-1])
ax.grid(True,which='major',linestyle='solid')
ax.set_aspect((XLIM[1]-XLIM[0])/(YLIM[1]-YLIM[0]))
plt.show()
生成的图形具有定义的纵横比:
但是,如果我想使用 twinx()
函数添加一个额外的 y
轴,纵横比将被重置:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1.6,50) + 50.0
fig = plt.figure()
ax = fig.add_subplot(111)
ax2 = ax.twinx()
XLIM = [50.0, 51.6]
YLIM = [0.0, 1.1, 0.0, 11.0]
ax.plot(x,np.sin(x-50.0),'b')
ax.set_xlim([XLIM[0], XLIM[1]])
ax.set_ylim([YLIM[0], YLIM[1]])
ax.set_xticks(np.arange(XLIM[0], XLIM[1], 0.2))
ax.set_yticks(np.arange(YLIM[0], YLIM[1]+0.1, 0.1)[:-1])
ax.grid(True,which='major',linestyle='solid')
ax.set_aspect((XLIM[1]-XLIM[0])/(YLIM[1]-YLIM[0]))
plt.show()
生成此图(其中先前在左侧定义的 y
-limits 被重置):
现在,再次尝试指定纵横比不会产生预期的结果:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1.6,50) + 50.0
fig = plt.figure()
ax = fig.add_subplot(111)
ax2 = ax.twinx()
XLIM = [50.0, 51.6]
YLIM = [0.0, 1.1, 0.0, 11.0]
ax.plot(x,np.sin(x-50.0),'b')
ax2.plot(x,np.cos(x-50.0)*10.,'r')
ax.set_xlim([XLIM[0], XLIM[1]])
ax.set_ylim([YLIM[0], YLIM[1]])
ax2.set_ylim([YLIM[2], YLIM[3]])
ax.set_xticks(np.arange(XLIM[0], XLIM[1], 0.2))
ax.set_yticks(np.arange(YLIM[0], YLIM[1]+0.1, 0.1)[:-1])
ax2.set_yticks(np.arange(YLIM[2], YLIM[3]+1.0, 1.0))
ax.grid(True,which='major',linestyle='solid')
ax.set_aspect((XLIM[1]-XLIM[0])/(YLIM[1]-YLIM[0]))
ax2.set_aspect((XLIM[1]-XLIM[0])/(YLIM[3]-YLIM[2]))
plt.show()
这会产生:
为了生成像第一个那样的图,但有两个不同比例的 y
轴,我缺少什么?使用 twinx
时如何定义纵横比?
最佳答案
查看轴的 adjustable
参数。这控制在更改纵横比/限制时是否更改数据限制或边界矩形的形状。
通常情况下,选项是"box"
和"datalim"
,但有一个共享轴的特殊情况。在您的情况下,您需要 adjustable='box-forced'
。
作为一个简单的例子(我冒昧地稍微简化了一些事情,如果你更清楚的话,可以随意使用单独的 set_foo
方法。如果你采用那条路线,方法是 ax.set_adjustable
.):
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,1.6,50) + 50.0
fig, ax = plt.subplots()
ax2 = ax.twinx()
XLIM = [50.0, 51.6]
YLIM = [0.0, 1.1, 0.0, 11.0]
ax.plot(x,np.sin(x-50.0),'b')
ax2.plot(x,np.cos(x-50.0)*10.,'r')
ax.set(adjustable='box-forced',
xlim=XLIM, ylim=YLIM[:2],
xticks=np.arange(XLIM[0], XLIM[1], 0.2),
yticks=np.arange(YLIM[0], YLIM[1]+0.1, 0.1)[:-1],
aspect=(XLIM[1]-XLIM[0])/(YLIM[1]-YLIM[0]))
ax2.set(adjustable='box-forced',
ylim=YLIM[2:],
yticks=np.arange(YLIM[2], YLIM[3]+1.0, 1.0),
aspect=(XLIM[1]-XLIM[0])/(YLIM[3]-YLIM[2]))
ax.grid(True, which='major',linestyle='solid')
plt.show()
关于python - 使用 twinx 时定义纵横比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24738186/
我正在绘制一个带有两个 y 轴的双图。第二个轴 ax2 由 twinx 创建。问题是通过 yticks 对第二个 y 轴的着色不再起作用。相反,我必须单独set_color 标签。相关代码如下: fi
我在对齐两个不同 y 轴的刻度时遇到一些问题,第一个轴的刻度为线性范围,第二个轴的刻度为非线性范围,如下图所示。 HS, TMN = np.meshgrid(hs, period) r = funct
我有一个循环,在特定条件下(例如出现 3 次),我想用 twinx 绘制两个数据集,所以例如最后我在左 y 上有 3 个图,在右 y 上有 3 个图。当我使用通常的 twinx 时,循环的右 y 值不
如何显示双轴绘图,以使上轴和右轴的长宽比“相等”。例如,以下代码将生成一个正方形图 import matplotlib.pyplot as plt fig, ax = plt.subplots() a
在 twinx() 之后立即使用 axhline 时,绘制的水平线仍然遵循第一个 y 轴的坐标。 关于如何使其缩放到第二个 y 轴的任何提示? 最佳答案 您可以从 Axes 对象调用 axhline
fig, ax1 = plt.subplots() ax2 = ax1.twinx() ax1.plot(x,y1,'go-') ax1.plot(x,y2,'ro-') ax1.plot(x,y3,
我想使用光标(x,y 值显示在图的左下角)来测量两点之间的 y 和 x 距离,但这仅适用于第二个轴上绘制的数据。 有没有办法在第二个轴和第一个 y 轴之间来回切换? 请注意:我不需要以编程方式获取点之
请原谅我糟糕的 Python 技能,我是这门语言的新手! 尽管如此,我对目前从 twinx() 获得的结果感到困惑。我不确定为什么当我将 x 轴成双时,右侧 y 轴上的刻度似乎加倍。 import m
如何为使用 twinx 的图设置纵横比? 下面,我举三个例子: 没有 twinx 来突出显示我是如何设置宽高比的 仅用twinx来说明如何重置先前定义的纵横比 我尝试在使用 twinx 时定义两个 y
右下角的跟踪器(以红色突出显示)报告相对于右侧 y 轴的 y 值。 如何让跟踪器报告相对于左侧 y 轴的 y 值? import matplotlib.pyplot as plt import num
我正在尝试使用 Python 和 Matplotlib 绘制大量不同的数据集。我正在使用 twinx 在主轴上绘制一个数据集,在次轴上绘制另一个数据集。我想为这些数据集提供两个单独的图例。 在我当前的
我想创建一个具有两个 y 轴的图形,并在我的代码中的不同点(来自不同的函数)向每个轴添加多条曲线。 在第一个函数中,我创建了一个图形: import matplotlib.pyplot as p
我正在尝试使用 Pandas matplotlib API 在同一张图上绘制条形图和线图。然而,进展并不顺利。我正在使用 twinx(),这似乎是实现此目的的普遍接受的方式。 请注意,这是在 Jupy
我通过 rcParams['axes.color_cycle'] = [some nice and carefully choose colours] 调整了我的绘图的颜色顺序 但是当我对第二个轴使用
我目前在 Sage 中使用 matplotlib 来绘制一些数据。我已经可以使用此示例添加多个 y 轴: from mpl_toolkits.axes_grid1 import host_subplo
我创建了一个具有 2 个 y 轴的 matplotlib 图。 y 轴具有不同的刻度,但我希望刻度线和网格对齐。我正在从 excel 文件中提取数据,因此无法事先知道最大限制。我尝试了以下代码。 #
是否可以绘制具有两个独立 y 轴的图,使刻度线对齐? 下面是解决方案一半的示例。我使用 twinx 将 y 轴加倍,但刻度线没有对齐,网格线在绘图上形成了一个尴尬的模式。有没有办法让刻度线共享相同的位
我有以下带有拆分 y 轴的图: df = pd.DataFrame({ 'x': ["a","b","c","d"], 'y': [10,20,30,400],
我正在开发一个功能,可以让我轻松地在绘图中的任意位置添加寄生虫轴,但我遇到了一个奇怪的情况。看看下面的代码: import matplotlib.pyplot as plt plt.plot() pl
这个问题已经有答案了: Color multiple twinx() axes (1 个回答) 已关闭 3 年前。 我正在使用ax2 = ax1.twinx()属性在同一图中具有不同缩放比例的多个图形
我是一名优秀的程序员,十分优秀!