Fab*_*nna 4 python matplotlib pandas
从以下示例开始:
fig, ax = plt.subplots()
df = pd.DataFrame({'n1':[1,2,1,3], 'n2':[1,3,2,1], 'l':['a','b','c','d']})
for label in df['l']:
df.plot('n1','n2', kind='scatter', ax=ax, s=50, linewidth=0.1, label=label)
Run Code Online (Sandbox Code Playgroud)
我得到的是以下散点图:
我现在正尝试为四个点分别设置不同的颜色。我知道我可以在列表中循环显示4种颜色,例如:
colorlist = ['b','r','c','y']
Run Code Online (Sandbox Code Playgroud)
但是由于我的实际数据集至少包含20个不同的点,因此我一直在寻找一种在其中循环的“颜色生成器”。
下面的方法将创建与数据框一样长的颜色列表,然后绘制带有标签的每种颜色的点:
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib.colors as colors
import numpy as np
import pandas as pd
fig, ax = plt.subplots()
df = pd.DataFrame({'n1':[1,2,1,3], 'n2':[1,3,2,1], 'l':['a','b','c','d']})
colormap = cm.viridis
colorlist = [colors.rgb2hex(colormap(i)) for i in np.linspace(0, 0.9, len(df['l']))]
for i,c in enumerate(colorlist):
x = df['n1'][i]
y = df['n2'][i]
l = df['l'][i]
ax.scatter(x, y, label=l, s=50, linewidth=0.1, c=c)
ax.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
IIUC 你可以这样做:
import matplotlib.pyplot as plt
from matplotlib import colors
import pandas as pd
colorlist = list(colors.ColorConverter.colors.keys())
fig, ax = plt.subplots()
[df.iloc[[i]].plot.scatter('n1', 'n2', ax=ax, s=50, label=l,
color=colorlist[i % len(colorlist)])
for i,l in enumerate(df.l)]
Run Code Online (Sandbox Code Playgroud)
颜色表:
In [223]: colorlist
Out[223]: ['m', 'b', 'g', 'r', 'k', 'y', 'c', 'w']
Run Code Online (Sandbox Code Playgroud)
PS colorlist[i % len(colorlist)]
- 应始终保留在列表边界内