这是为了澄清题目。假设您有四个整数列表,要用它们生成散点图:
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]
为了简单起见,您还有一个应用于所有列表的函数,以便:
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轴,知道函数的值从
f(x)=1/x
到0.06
,而不使用散布图中的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轴的散射:
这是同一个版本的版本,包括目前讨论过的第二个Y轴:
注:这个问题不同于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()
你也可以为
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')
关于python - Matplotlib:添加双y轴而不在绘图中使用其值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43493236/