Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib将比例更改为日志会更改线条颜色_Python_Matplotlib - Fatal编程技术网

Python Matplotlib将比例更改为日志会更改线条颜色

Python Matplotlib将比例更改为日志会更改线条颜色,python,matplotlib,Python,Matplotlib,非常不言自明,在我的例子中,当我将x轴置于对数刻度时,线条的颜色会发生变化 经过进一步的调查,它只发生在我使用的一个系统上,而不是其他系统上 它发生在Scientific Linux 6.4上,matplotlib版本为1.2.0。它在Mint Linux上使用MATE desktop和matplotlib版本1.1.1rc正常工作 创建并显示绘图后,它看起来很好。但是,如果我点击改变比例以记录x或y,它会改变颜色 这里的颜色很好: 但在改变它之后,它们就被改变了。 你知道为什么会发生这种情

非常不言自明,在我的例子中,当我将x轴置于对数刻度时,线条的颜色会发生变化

经过进一步的调查,它只发生在我使用的一个系统上,而不是其他系统上

它发生在Scientific Linux 6.4上,matplotlib版本为1.2.0。它在Mint Linux上使用MATE desktop和matplotlib版本1.1.1rc正常工作

创建并显示绘图后,它看起来很好。但是,如果我点击改变比例以记录x或y,它会改变颜色

这里的颜色很好:

但在改变它之后,它们就被改变了。

你知道为什么会发生这种情况,或者如何预防它吗

这种情况发生在以下代码中:

import matplotlib.pyplot as pyplot
from math import floor, log10
import cProfile
import sys
import numpy as np
from scipy import interpolate


def digit(number):
  if number >= 10000:
    return int(floor(number / 10000))
  if number >= 1000:
    return int(floor(number / 1000))
  elif number >= 100:
    return int(floor(number / 100))
  elif number >= 10:
    return int(floor(number / 10))
  else:
    return number

def digit2(number):
  return int(str(number)[0])


def calcProbs(startingN = 10, maxN = 100, logScale = True, interp = False):


  if logScale:
    lowPower, highPower = int(floor(log10(startingN))), int(floor(log10(maxN)))
    Ns = [i * 10 ** j for j in range(lowPower, highPower) for i in range(1,10)] + [10 ** (highPower)]
    probs = [[0 for _ in range(10)] for _ in range(len(Ns))]
  else:
    Ns = range(startingN, maxN+1)
    probs = [[0 for _ in range(10)] for _ in range(maxN-startingN+1)]

  for N, prob in zip(Ns, probs):
    print N, prob

  for index, N in enumerate(Ns):
    print N
    for n in range(1,N+1):
      for i in range(1, n+1):
        probs[index][digit(i)-1] += 1.0 / (N  * n) 

    probs[index][9] = sum(probs[index][:-1]) #Make sure always sums to 1.

  probs = zip(*probs)

  if interp:
    newNs = range(min(Ns), max(Ns))
    for i, prob in enumerate(probs):
      probs[i] = interpolate.splev(newNs, interpolate.splrep(Ns, prob,s=0), der=0)

    Ns = newNs

  return Ns, probs

"""
cProfile.run("calcProbs(maxN=500)")

"""
Ns, probs = calcProbs(maxN=100, logScale=False, interp=True)


fig = pyplot.figure()
ax = fig.add_subplot(1,1,1)

for prob, benford in zip(probs, [0.301, 0.176, 0.125, 0.097, 0.079, 0.067, 0.085, 0.051, 0.046]):
  line = ax.plot(Ns, prob)
  ax.plot(Ns, [benford for _ in Ns], ls="--", color=line[0]._color)


#ax.legend()
pyplot.show()

虽然我怀疑这可能是一个系统/安装相关的问题。

你能提供一些代码来复制它吗?我现在正在这样做。是的,看起来是系统相关的-在Windows 7 64位上使用Anaconda 2.0,我无法复制。