Python twinx杀死蜱虫标签颜色

Python twinx杀死蜱虫标签颜色,python,colors,matplotlib,Python,Colors,Matplotlib,我正在用两个y轴绘制一个双图。第二个轴ax2由twinx创建。问题在于,通过yticks对第二个y轴进行着色已不再有效。相反,我必须分别设置标签的颜色。以下是相关代码: fig = plt.figure() fill_between(data[:,0], 0, (data[:,2]), color='yellow') yticks(arange(0.2,1.2,0.2), ['.2', '.4', '.6', '.8', ' 1'], color='yellow') ax2 = twinx()

我正在用两个y轴绘制一个双图。第二个轴ax2由twinx创建。问题在于,通过
yticks
对第二个y轴进行着色已不再有效。相反,我必须分别设置标签的颜色。以下是相关代码:

fig = plt.figure()
fill_between(data[:,0], 0, (data[:,2]), color='yellow')
yticks(arange(0.2,1.2,0.2), ['.2', '.4', '.6', '.8', ' 1'], color='yellow')
ax2 = twinx()
ax2.plot(data[:,0], (data[:,1]), 'green')
yticks(arange(0.1,0.6,0.1), ['.1 ', '.2', '.3', '.4', '.5'], color='green')
# color='green' has no effect here ?!
# instead this is needed:
for t in ax2.yaxis.get_ticklabels(): t.set_color('green')
show()
导致:

只有在设置勾选字符串时,才会出现此问题

yticks(arange(0.1,0.6,0.1), ['.1 ', '.2', '.3', '.4', '.5'], color='green')
省略它,就像这里一样

yticks(arange(0.1,0.6,0.1), color='green')
而且颜色很好

这是一个bug(找不到对此的任何报告)、一个功能(?!)还是 我是不是遗漏了什么?我正在ubuntu上使用python 2.6.5和matplotlib 0.99.1.1


不管它值多少钱,您的代码在我的系统上运行良好,即使没有
For
循环来设置标签颜色。作为参考,这里有一个独立的示例,试图完全遵循您发布的内容:

import matplotlib.pyplot as plt
import numpy as np

# Generate some data
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)

# Plot the yellow data
plt.fill_between(x, yellow_data, 0, color='yellow')
plt.yticks([0.0, 0.5, 1.0], color='yellow')

# Plot the green data
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 ish状态机接口或OO接口,不要将它们混合太多。(就我个人而言,我更喜欢只使用OO界面。使用
pyplot
设置图形对象和for
show
,否则使用axes方法。不过,每个人都有自己的方法。)

无论如何,matplotlib>=1.0时,
tick_params
函数使这一点更加方便。(我在这里也使用了
plt.subplot
,它也只在>=1.0中使用。)

旧版本matplotlib的等效代码看起来更像这样:

import matplotlib.pyplot as plt
import numpy as np

# Generate some data
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)

# Plot the data
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax2 = ax1.twinx()

ax1.plot(yellow_data, 'y-')
ax2.plot(green_data, 'g-')

# Change the axis colors...
for ax, color in zip([ax1, ax2], ['yellow', 'green']):
    for label in ax.yaxis.get_ticklabels():
        label.set_color(color)

plt.show()

我不太清楚你在做什么。。。(你所说的“双绘图”到底是什么意思?
twinx
/
twiny
、子绘图,或者完全其他的东西?)你能发布一些示例代码或问题的示例图像和/或你期望发生的事情吗?很抱歉描述不清楚。我使用了
twinx
,并将问题描述浓缩。另外还添加了一个图形。只有当我显式地设置标签字符串时,才会出现忽略的
color=
标记的问题:
yticks(arange(0.1,0.4,0.1),['.1','.2','.3'],color='green')
。设置字符串有效,但颜色无效。如果您指定了第一个最小示例,它是否也有效?例如,
plt.yticks([-4,-3,-2,-1,0,1],'foo','bar',color='green')
。感谢您指出不同的matplotlib样式(matlab与oo)。我将进一步阅读,以提高代码的一致性。
import matplotlib.pyplot as plt
import numpy as np

# Generate some data
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)

# Plot the data
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax2 = ax1.twinx()

ax1.plot(yellow_data, 'y-')
ax2.plot(green_data, 'g-')

# Change the axis colors...
for ax, color in zip([ax1, ax2], ['yellow', 'green']):
    for label in ax.yaxis.get_ticklabels():
        label.set_color(color)

plt.show()