为大熊猫系列使用色彩映射

时间:2017-05-24 07:21:17

标签: python pandas matplotlib

我有大熊猫系列的复数,我想绘制。目前,我循环遍历每个点并为其指定颜色。我宁愿生成绘图而不需要遍历每个点...使用Series.plot()会更好。将系列转换为numpy是可以的。

以下是我目前所拥有的一个例子:

import pandas as pd
import numpy as np
from matplotlib import pyplot

s = pd.Series((1+np.random.randn(500)*0.05)*np.exp(1j*np.linspace(-np.pi, np.pi, 500)))

cmap = pyplot.cm.viridis    
for i, val in enumerate(s):
    pyplot.plot(np.real(val), np.imag(val), 'o', ms=10, color=cmap(i/(len(s)-1)))
pyplot.show()

enter image description here

2 个答案:

答案 0 :(得分:3)

您可以使用pyplot.scatter,它允许根据值对点进行着色。

pyplot.scatter(np.real(s), np.imag(s), s=50, c=np.arange(len(s)), cmap='viridis')

在这里,我们将c设置为递增序列,以获得与问题相同的结果。 enter image description here

答案 1 :(得分:2)

你可以简单地绘制系列的实部和虚部,而不需要循环。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

s = pd.Series((1+np.random.randn(500)*0.05)*np.exp(1j*np.linspace(-np.pi, np.pi, 500)))

plt.plot(s.values.real,s.values.imag, marker="o", ls="")

plt.show()

enter image description here

但是,如果要使用不同的颜色,则需要使用散点图:

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

s = pd.Series((1+np.random.randn(500)*0.05)*np.exp(1j*np.linspace(-np.pi, np.pi, 500)))

plt.scatter(s.values.real,s.values.imag, c = range(len(s)), cmap=plt.cm.viridis)

plt.show()

enter image description here