无论价值多少,你的代码在我的系统上即使没有 for
循环来设置标签颜色也可以正常运行。只是作为参考,这里有一个独立的示例,试图基本上完全按照你发布的内容进行操作:
import matplotlib.pyplot as plt
import numpy as np
num = 200
x = np.linspace(501, 1200, num)
yellow_data, green_data = np.random.random((2,num))
green_data -= np.linspace(0, 3, yellow_data.size)
plt.fill_between(x, yellow_data, 0, color='yellow')
plt.yticks([0.0, 0.5, 1.0], color='yellow')
ax2 = plt.twinx()
ax2.plot(x, green_data, 'g-')
plt.yticks([-4, -3, -2, -1, 0, 1], color='green')
plt.show()
我的猜测是你的问题主要来自于混合引用不同的对象。 我猜想你的代码有点复杂,当你调用
plt.yticks
时,
ax2
不是当前轴。 你可以通过在调用
yticks
之前显式调用
sca(ax2)
(将当前轴设置为
ax2
)来测试这个想法,并查看是否改变了事情。 一般来说,最好坚持完全使用Matlab风格的状态机界面或OO界面,并且不要过多地混合使用它们。 (就我个人而言,我更喜欢只坚持使用OO界面。使用
pyplot
设置图形对象和
show
,否则使用轴方法。但每个人都有自己的偏好。)无论如何,对于matplotlib> = 1.0,
tick_params
函数使此变得更加方便。(我在这里还使用了
plt.subplots
,这仅适用于> = 1.0。)
import matplotlib.pyplot as plt
import numpy as np
yellow_data, green_data = np.random.random((2,2000))
yellow_data += np.linspace(0, 3, yellow_data.size)
green_data -= np.linspace(0, 3, yellow_data.size)
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot(yellow_data, 'y-')
ax2.plot(green_data, 'g-')
ax1.tick_params(axis='y', labelcolor='yellow')
ax2.tick_params(axis='y', labelcolor='green')
plt.show()
![在此输入图片描述](https://istack.dev59.com/5jc6Q.webp)
对于旧版本的matplotlib,等效的代码看起来更像这样:
import matplotlib.pyplot as plt
import numpy as np
yellow_data, green_data = np.random.random((2,2000))
yellow_data += np.linspace(0, 3, yellow_data.size)
green_data -= np.linspace(0, 3, yellow_data.size)
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax2 = ax1.twinx()
ax1.plot(yellow_data, 'y-')
ax2.plot(green_data, 'g-')
for ax, color in zip([ax1, ax2], ['yellow', 'green']):
for label in ax.yaxis.get_ticklabels():
label.set_color(color)
plt.show()
twinx
/twiny
、子图,还是其他什么?)你能否发布一些示例代码或问题的示例图像以及你期望发生的情况? - Joe Kington