gpt4 book ai didi

python - Matplotlib:添加双 y 轴而不在图中使用其值

转载 作者:行者123 更新时间:2023-11-28 22:28:38 24 4
gpt4 key购买 nike

这是为了澄清问题标题。假设您有四个整数列表,您想要用它们生成散点图:

a=[3,7,2,8,12,17]
b=[9,4,11,7,6,3]
c=[9,3,17,13,10,5]
d=[5,1,1,14,5,8]

为了简单起见,您还有一个函数 f(x)=1/x,它适用于所有列表,因此:

from __future__ import division
a1=[1/i for i in a]
b1=[1/i for i in b]
c1=[1/i for i in c]
d1=[1/i for i in d]

我的问题:如何添加第二个 y 轴,知道函数返回的值范围从 0.061.0,< strong>在散点图中不使用任何 a1、b1、c1、d1 列表?

我的意思是:如果您以传统方式生成以下散点图,那么您如何根据 a1、b1、c1、d1 的值添加第二个 y 轴,而无需在其中使用任何系列情节本身?

import matplotlib.pyplot as plt
plt.scatter(a,b,c='red',label='reds')
plt.scatter(c,d,c='blue',label='blues')
plt.legend(loc='best')

这是没有第二个 y 轴的散点图: enter image description here

这是同一版本的合成版本,包括目前讨论的第二个 y 轴: enter image description here

注意:这个问题不同于this ,因为我不想用不同的比例绘制。我只想添加具有相关值的第二个轴。

最佳答案

确保新轴上的数字与其倒数对应的位置:

import matplotlib.pylab as plt

a=[3,7,2,8,12,17]
b=[9,4,11,7,6,3]
c=[9,3,17,13,10,5]
d=[5,1,1,14,5,8]

fig = plt.figure()
ax = fig.add_subplot(111)

ax.scatter(a,b,c='red',label='reds')
ax.scatter(c,d,c='blue',label='blues')
ax.legend(loc='best')
ax.set_ylabel('Y')
# make shared y axis
axi = ax.twinx()
# set limits for shared axis
axi.set_ylim(ax.get_ylim())
# set ticks for shared axis
inverse_ticks = []
label_format = '%.3f'
for tick in ax.get_yticks():
if tick != 0:
tick = 1/tick
inverse_ticks.append(label_format % (tick,))
axi.set_yticklabels(inverse_ticks)
axi.set_ylabel('1/Y')
fig.tight_layout()
fig.show()

enter image description here

你也可以在 X 轴上这样做:

# make shared x axis
xaxi = ax.twiny()
# set limits for shared axis
xaxi.set_xlim(ax.get_xlim())
# set ticks for shared axis
inverse_ticks = []
label_format = '%.3f'
for tick in ax.get_xticks():
if tick != 0:
tick = 1/tick
inverse_ticks.append(label_format % (tick,))
xaxi.set_xticklabels(inverse_ticks)
xaxi.set_xlabel('1/X')

enter image description here

关于python - Matplotlib:添加双 y 轴而不在图中使用其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43493236/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com